2016-10-20 3 views
-2

Ich versuche, Daten in meine Datenbank mit einem DataGridView in C# einzufügen. Allerdings, wenn ich klicken Sie auf Speichern Sie die folgende Fehlermeldung angezeigt:Was ist falsch mit meinem Einfügen Befehl

System.Data.OleDb.OleDbException was unhandled

HResult = -2147217900
Message = Syntax error in INSERT INTO statement.
Source = Microsoft Office Access Database Engine
ErrorCode = -2147217900

Hier ist der Code, den ich habe:

private void save_btn_Click(object sender, EventArgs e) 
{ 
    OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Stock.accdb"); 
    con.Open(); 

    for (int i = 0; i < dataGridView_insert.Rows.Count; i++) 
    { 
     OleDbCommand cmd = new OleDbCommand("INSERT INTO product(OV,Reference,Cod_Client,Client,Qtd,Type_product,Posicion_product,) VALUES ('" + dataGridView_insert.Rows[i].Cells["OV"].Value + "','" + dataGridView_insert.Rows[i].Cells["Reference"].Value + "','" + dataGridView_insert.Rows[i].Cells["Cod_Client"].Value + "','" + dataGridView_insert.Rows[i].Cells["Client"].Value + "','" + dataGridView_insert.Rows[i].Cells["Qtd"].Value + "','" + dataGridView_insert.Rows[i].Cells["Type_product"].Value + "','" + dataGridView_insert.Rows[i].Cells["Posicion_product"].Value + " ' ", con);  
     cmd.ExecuteNonQuery();  
    } 

    con.Close(); 
} 

Was ist falsch?

+1

was ist das ',' hier am Ende 'Type_product, Posicion_product,' 'Ich stimme, um diesen Tippfehler zu schließen – fubo

+0

Verwenden Sie Parameter anstelle von String-Verkettung. Es macht es unmöglich zu wissen, was falsch wäre, wenn Sie nicht wissen, welche Werte eingefügt werden. Außerdem öffnet es die Tür für SQL-Injection-Angriffe. –

+0

Aber auch ohne dies funktioniert es nicht – satbr

Antwort

1

Sie haben eine streunende , nach Posicion_product und Sie haben auch die schließende Klammer von VALUES in Ihrer Insert-Anweisung verpasst. Entfernen Sie es. Auch sollten Sie immer parameterized queries verwenden SQL Injection zu vermeiden:

OleDbCommand cmd = new OleDbCommand("INSERT INTO product(OV,Reference,Cod_Client,Client,Qtd,Type_product,Posicion_product) VALUES (@a,@b,@c,@d,@e,@f,@g)", con); 
cmd.Parameters.AddWithValue("@a", dataGridView_insert.Rows[i].Cells["OV"].Value); 
cmd.Parameters.AddWithValue("@b", dataGridView_insert.Rows[i].Cells["Reference"].Value); 
cmd.Parameters.AddWithValue("@c", dataGridView_insert.Rows[i].Cells["Cod_Client"].Value); 
//And continue for other parameters 

Obwohl die Art direkt angeben und verwenden Sie die Value Eigenschaft ist besser als AddWithValue:

cmd.Parameters.Add("@a", SqlDbType.VarChar).Value = dataGridView_insert.Rows[i].Cells["OV"].Value; 
+0

Ich habe es getan, ich habe die anderen Parameter hinzugefügt. Aber immer noch den gleichen Fehler: – satbr

+0

Message = Parameter @a hat keinen Standard. – satbr

+0

@satbr Können Sie Ihre Frage mit Ihrem neuen Code aktualisieren? Ich nehme an, du hast etwas verpasst. –