2010-11-21 5 views
1

Ich brauche deine Hilfe, ich kann den Fehler nicht finden, es ist ein Notfall, hier ist meine Methode und ein Bild des Fehlers der Fehler sagen "Syntaxfehler INSERT INTO-Anweisung" hier ist ein Bild, wie kann ich es behebenSyntaxfehler in dieser Methode Taste C#?

, egal wie seine Struktur

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

Ich bin ziemlich sicher, dass die abgelesenen Werte sollten '' VALUES – Fionnuala

+0

wie kann man erklären, weiter? Sie meinen, ändern Sie den Teil der Werte für VALUES (?,?,?,?) – peggalvan

+3

Ich denke remou bedeutet Access unterstützt keine benannten Parameter (wie @meta) –

Antwort

1

die Fehlermeldung ist klar: Fehler in INSERT INTO-Anweisung.

ich jede SQL-Syntax Problem nicht so gesehen werde ich denke, es über eine Reserve Wort ist, versuchen sie mit [] entkommen:

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

In Kombination mit Remou Beobachtung benannter Parameter wird es:

Und Sie müssen sehr vorsichtig sein, die Parameter in der richtigen Reihenfolge hinzuzufügen.

+0

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

+0

Ok, Real ist drin, Meta ist nicht. Ich würde immer noch entkommen. –

+0

vielen Dank es funktioniert !!, ich habe immer noch Zweifel, wie kann ich Ausnahme kontrollieren? Es wird eine Nachricht angezeigt, die besagt: System.NullReferenceException: Objektreferenz nicht auf eine Instanz eines Objekts festgelegt. – peggalvan

0

Da Sie OLEDB-Provider verwenden, müssen Sie wahrscheinlich das "?" Symbol für die Parameter. Sie können die folgende Abfrage versuchen:? (?,?,?,)

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

danke für alle deine antworten – peggalvan