C# C语言中的更新语法错误#
我想用datagridview数据更新数据库这是我的代码:C# C语言中的更新语法错误#,c#,sql,sql-server,ado.net,C#,Sql,Sql Server,Ado.net,我想用datagridview数据更新数据库这是我的代码: for (int i = 0; i < dataGridView1.Rows.Count; i++) { SqlCommand cmd2 = new SqlCommand("UPDATE Pharmacy_Items Set Quantity= Quantity + " + dataGridView1.Rows[x].Cells[4].Value + " where Item
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
SqlCommand cmd2 = new SqlCommand("UPDATE Pharmacy_Items Set Quantity= Quantity + " + dataGridView1.Rows[x].Cells[4].Value + " where ItemName='" + dataGridView1.Rows[x].Cells[1].Value + "'", mycon);
cmd2.ExecuteNonQuery();
x += 1;
}
for(int i=0;i
它在何处附近给出语法错误。您应该使用参数,在SQL查询中附加字符串是一个非常糟糕的主意(SQL注入)。下面应该会让错误更清楚:
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
decimal qty = Convert.ToDecimal(dataGridView1.Rows[x].Cells[4].Value);
string itemName = dataGridView1.Rows[x].Cells[1].Value;
string commandText = "UPDATE Pharmacy_Items Set Quantity= Quantity + @p1 WHERE ItemName = @p2";
SqlCommand cmd2 = new SqlCommand(commandText, mycon);
cmd2.Parameters.AddWithValue("@p1", qty);
cmd2.Parameters.AddWithValue("@p2", itemName);
cmd2.ExecuteNonQuery();
}
for(int i=0;i
我假设语法错误来自SQL连接。如果是这样的话,参数化应该解决它。您可以使用以下工具使正确参数化变得简单:
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
string itemName = (string)dataGridView1.Rows[x].Cells[1].Value;
// note: I don't know what the actual type is here; int? decimal?
int quantity = (int)dataGridView1.Rows[x].Cells[4].Value;
myCon.Execute(
"UPDATE Pharmacy_Items Set Quantity=Quantity+@quantity where ItemName=@itemName",
new { itemName, quantity });
x += 1;
}
for(int i=0;i
有两件事不对:
或
从dataGridView分配的某些值为空
cmd2.CommandText = "UPDATE Pharmacy_Items Set Quantity = Quantity + @Quantity where ItemName = @ItemName";
cmd2.Parameters.AddWithValue(@Quantity, dataGridView1.Rows[x].Cells[4].Value);
cmd2.Parameters.AddWithValue(@ItemName, dataGridView1.Rows[x].Cells[1].Value);
cmd2.ExecuteNonQuery();
编辑:OP希望增加数量字段
cmd2.CommandText = "UPDATE Pharmacy_Items Set Quantity = Quantity + @Quantity where ItemName = @ItemName";
cmd2.Parameters.AddWithValue(@Quantity, dataGridView1.Rows[x].Cells[4].Value);
cmd2.Parameters.AddWithValue(@ItemName, dataGridView1.Rows[x].Cells[1].Value);
cmd2.ExecuteNonQuery();
如果单元格可以是空的,您可以像这样用0替换空的,这样您只需将0添加到数量中,而不是得到异常
cmd2.CommandText = "UPDATE Pharmacy_Items Set Quantity = Quantity + @Quantity where ItemName = @ItemName";
cmd2.Parameters.AddWithValue(@Quantity, dataGridView1.Rows[x].Cells[4].Value ?? 0);
cmd2.Parameters.AddWithValue(@ItemName, dataGridView1.Rows[x].Cells[1].Value);
cmd2.ExecuteNonQuery();
您的输入有效吗?显示一个已对此进行测试的示例输入。在查询中使用参数在执行任何其他操作之前,请阅读有关CommandParameters的内容,请参阅:@joeTaras我的输入是文本,ItemName是nvarchar(25)语法是quantity=quantity+datagridview单元格,我想增加到数量字段我已经在我的答案中编辑了如何使用参数添加到数量。