2010-11-21 33 views
1

J'ai besoin de votre aide, je ne trouve pas l'erreur, c'est une urgence, voici ma méthode et une image de l'erreur l'erreur dit "erreur de syntaxe instruction INSERT INTO" voici une image, comment puis-je le réparer , peu importe la façon dont la structure de saErreur de syntaxe dans ce bouton de méthode C#?

http://img718.imageshack.us/img718/8864/erroruh.jpgalt text

private void btnCronograma_Click(object sender, EventArgs e) 
{ 
    string connstring = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\amaury\\Documents\\TEC\\Septimo Semestre\\Administracion de proyectos de ingenieria de softwaere\\nuevo4\\nuevo\\Office\\Office\\Policias.accdb"; 
    using (OleDbConnection conn = new OleDbConnection(connstring)) 
    { 
    conn.Open(); 

    string sql = "INSERT INTO IndicadorProyecto (idProyecto, idMes, meta, real) VALUES(@idProyecto , @idMes , @meta, @real)"; 
    OleDbCommand cmd = new OleDbCommand(sql, conn); 

    foreach (DataGridViewRow row in dataGridView8.Rows) 
    { 
    DataGridViewComboBoxCell combo3 = row.Cells["idProyecto"] as DataGridViewComboBoxCell; 
    DataGridViewComboBoxCell combo4 = row.Cells["idMes"] as DataGridViewComboBoxCell; 

    if (combo3 == null || combo4 == null) 
    { 
     MessageBox.Show("No se pudo convertir"); 
     continue; 
    } 

    int idProyecto = int.Parse(combo3.Value.ToString()); 
    int idMes = int.Parse(combo4.Value.ToString()); 
    int meta = int.Parse(row.Cells[3].Value.ToString()); 
    int real = int.Parse(row.Cells[4].Value.ToString()); 

    cmd.Parameters.Clear(); 
    cmd.Parameters.AddWithValue("@idProyecto", idProyecto); 
    cmd.Parameters.AddWithValue("@idMes", idMes); 
    cmd.Parameters.AddWithValue("@meta", meta); 
    cmd.Parameters.AddWithValue("@real", real); 


    cmd.ExecuteNonQuery(); 
    } 
} 
} 
+2

Je suis assez sûr que les valeurs doivent lire '' VALEURS – Fionnuala

+0

comment pouvez-vous expliquer davantage? vous voulez dire changer la partie des valeurs pour VALUES (?,?,?,?) – peggalvan

+3

Je pense que remou signifie que Access ne supporte pas les paramètres nommés (comme @meta) –

Répondre

1

le message d'erreur est clair: erreur dans l'instruction INSERT INTO.

Je ne vu aucun problème de syntaxe SQL donc je vais deviner qu'il est sur un mot de réserve, essayez de les échapper avec []:

string sql = "INSERT INTO IndicadorProyecto (idProyecto, idMes, [meta], [real]) 
      VALUES(@idProyecto , @idMes , @meta, @real)"; 

Combiné avec l'observation de remou des paramètres nommés, il devient:

string sql = "INSERT INTO IndicadorProyecto (idProyecto, idMes, [meta], [real]) 
      VALUES(?, ?, ?, ?)"; 

Et vous devez faire très attention à l'ajout des paramètres dans le bon ordre.

+0

Liste: http://support.microsoft.com/kb/248738/es – Fionnuala

+0

Ok, Real est là, meta n'est pas. Je voudrais encore y échapper. –

+0

merci beaucoup ça marche !!, j'ai encore un doute comment puis-je contrôler l'exception? il affiche un message qui dit: System.NullReferenceException: Référence d'objet non définie sur une instance d'un objet. – peggalvan

0

Comme vous utilisez un fournisseur OLEDB, vous devrez probablement utiliser le "?" symbole pour les paramètres. Vous pouvez essayer la requête suivante: (?,?,?,)

string sql = "INSERT INTO IndicadorProyecto (idProyecto, idMes, [meta], [real]) 
     VALUES(?, ? , ?, ?)"; 
+0

merci pour toutes vos réponses – peggalvan