2017-11-16 15 views
0
foreach (GridViewRow g1 in GridView1.Rows) 
{ 
     SqlCommand cmd = new SqlCommand("INSERT INTO Order VALUES(@buyersName, @deliveryAddress, @productID, @productName, @category, CONVERT(VARBINARY(MAX), @image), @price, @paymentMode, @holderName)", con); 

     cmd.Parameters.AddWithValue("@buyersName", Label2.Text); 
     cmd.Parameters.AddWithValue("@deliveryAddress", TextBox1.Text); 
     cmd.Parameters.AddWithValue("@productID", g1.Cells[0].Text); 
     cmd.Parameters.AddWithValue("@productName", g1.Cells[1].Text); 
     cmd.Parameters.AddWithValue("@category", g1.Cells[2].Text); 
     cmd.Parameters.AddWithValue("@image", g1.Cells[3].Text); 
     cmd.Parameters.AddWithValue("@price", g1.Cells[4].Text); 
     cmd.Parameters.AddWithValue("@paymentMode", checkRadioButton()); 
     cmd.Parameters.AddWithValue("@holderName", TextBox2.Text); 

     int r = cmd.ExecuteNonQuery(); 
} 

このコードを実行すると、「Order」の近くに構文エラーがあるというエラーが表示されます。 checkRadioButton()は、選択したRadioButtonのラベルを返しています。ExecuteNonQueryが実行されていません

あなたはあなたが明示的にINSERT句または将来的に列名を指定する必要があります方法で

INSERT INTO [Order] (column name, ...) 
select @buyersName, convert() ,... 

を使用するVALUE()

変更以内)変換(のような表現を持つことができません

+0

チェックをどこ '受注'テーブルはどのスキーマの下に格納されます。それは 'dbo'でもかまいません。 –

+9

' ORDER'は予約語です。角括弧 '[Order]'に入れてください – MatSnow

答えて

3

テーブルに列を追加すると、クエリは中断されます

また、なぜ予約名をテーブル名として使用していますか?

0

他の回答の文とは逆に、VALUESセクション内でCONVERTに可能である必要があります。 しかし、改善することができ、複数の傷やものがあります:

  1. ORDERは角括弧に入れて、reserved word in sql serverです:[Order]
  2. AddWithValueを使用しないでください。そうでない場合はSQL Serverは、問題となる可能性データ型を、推論します。代わりにAddを使用してください。詳細については、hereを参照してください。
  3. パラメータ値を設定する前に、g1.Cells[3].Textの値をバイト配列(byte[])に変換することができます。 byte[]に変換する場合は、hereを参照してください。
  4. は、クエリ内の列を指定して、それを壊さないためにするとき、将来

変更のテーブルの変更(異なる場合が列名とデータ型)は、次のようなあなたのコード:

SqlCommand cmd = new SqlCommand(@"INSERT INTO [Order] (buyersName, deliveryAddress, productID, productName, category, image, price, paymentMode, holderName) 
            VALUES(@buyersName, @deliveryAddress, @productID, @productName, @category, @image, @price, @paymentMode, @holderName)", con); 

cmd.Parameters.Add("@buyersName", SqlDbType.VarChar).Value = Label2.Text; 
cmd.Parameters.Add("@deliveryAddress", SqlDbType.VarChar).Value = TextBox1.Text; 
cmd.Parameters.Add("@productID", SqlDbType.VarChar).Value = g1.Cells[0].Text; 
cmd.Parameters.Add("@productName", SqlDbType.VarChar).Value = g1.Cells[1].Text; 
cmd.Parameters.Add("@category", SqlDbType.VarChar).value = g1.Cells[2].Text; 
cmd.Parameters.Add("@image", SqlDbType.VarBinary).Value = g1.Cells[3].Text; //convert g1.Cells[3].Text to a byte array 
cmd.Parameters.Add("@price", SqlDbType.Money) = g1.Cells[4].Text; 
cmd.Parameters.Add("@paymentMode", SqlDbType.VarChar).Value = checkRadioButton(); 
cmd.Parameters.Add("@holderName", SqlDbType.VarChar).Value = TextBox2.Text; 
int r=cmd.ExecuteNonQuery(); 
関連する問題