2016-10-20 5 views
-2

C#でDataGridViewを使用してデータベースにデータを挿入しようとしています。次のエラーメッセージが表示され、私は、保存ボタンをクリックすると、しかし:Insertコマンドの問題

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(); 
} 

間違っているもの:

System.Data.OleDb.OleDbException was unhandled

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

をここで私が持っているコードですか?

+1

'Type_product、Posicion_product、)'この型を閉じるために投票します – fubo

+0

文字列連結の代わりにパラメータを使用します。どの値が挿入されているのか分からない限り、何が間違っているのかを知ることは不可能です。さらに、SQLインジェクション攻撃の扉を開きます。 –

+0

しかし、これがなくてもうまくいきません – satbr

答えて

1

Posicion_productの後に1つの迷い,があります。また、挿入文でVALUESの閉じ括弧が欠落しています。それを除く。また、あなたは常にSQL Injectionを避けるためにparameterized queriesを使用する必要があります。

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 

を直接タイプを指定し、ValueプロパティがAddWithValueよりも優れている使用していますが: `、`ここでの最後のことは何か

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

私はそれをやった、私は他のパラメータを追加しました。しかし、同じエラーが表示される: – satbr

+0

メッセージ=パラメータ@aにはデフォルトがありません。 – satbr

+0

@satbr新しいコードで質問を更新できますか?私はあなたが何かを逃したと思います。 –