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
的标签。
答案 0 :(得分:3)
你不能在VALUE ()
更改使用
INSERT INTO [Order] (column name, ...)
select @buyersName, convert() ,...
顺便说一下,你应该在INSERT子句中明确指定列名,或者在向表中添加列时,你的查询将会中断
为什么还使用保留名称作为表名?
答案 1 :(得分:0)
与其他答案中的陈述相反,应该可以在CONVERT
- 部分内VALUES
。
但是有许多缺陷或事情可以改进:
ORDER
是reserved word in sql server,放在方括号中:[Order]
AddWithValue
否则sql server会推断数据类型,这可能会有问题。请改用Add
。有关详细信息,请参阅here。g1.Cells[3].Text
的值转换为字节数组(byte[]
)。要转换为byte[]
,请参阅here。更改您的代码如下(列名和数据类型可能有所不同):
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();