我有一个数据网格,在它里面我有很多行。我只想选取两列其中一行将在数据库中搜索具有该值的那一行第二列将用新值更新那一行。请帮助。
我的代码给出了语法错误
关键字'VALUES'附近语法错误
my code
{
using (SqlConnection con = new System.Data.SqlClient.SqlConnection("Data Source=rex;Initial Catalog=PersonalDetails;Integrated Security=True"))
{
con.Open();
for (int i = 0; i <= dataGridView2.Rows.Count - 1; i++)
{
String insertData = "UPDATE Test SET AvailableQty = " + "VALUES (@Qty) Where ItemCode = " + "VALUES (@ItemCode) ";
SqlCommand cmd = new SqlCommand(insertData, con);
cmd.Parameters.AddWithValue("@ItemCode", dataGridView2.Rows[i].Cells[0].Value ?? DBNull.Value);
cmd.Parameters.AddWithValue("@Qty", dataGridView2.Rows[i].Cells[4].Value ?? DBNull.Value);
cmd.ExecuteNonQuery();
}
}
}
首先,您应该始终使用参数化查询。这类代码对SQL注入攻击是开放的。
我认为你误解了T-SQL
中Update的语法。
using (SqlConnection con = new System.Data.SqlClient.SqlConnection("Data Source=rex;Initial Catalog=PersonalDetails;Integrated Security=True"))
{
con.Open();
for (int i = 0; i <= dataGridView2.Rows.Count - 1; i++)
{
string insertData = "UPDATE Test SET AvailableQty = @Qty Where ItemCode = @ItemCode";
SqlCommand cmd = new SqlCommand(insertData, con);
cmd.Parameters.AddWithValue("@ItemCode", dataGridView2.Rows[i].Cells[0].Value ?? DBNull.Value);
cmd.Parameters.AddWithValue("@Qty", dataGridView2.Rows[i].Cells[4].Value ?? DBNull.Value);
cmd.ExecuteNonQuery();
}
}
你的查询字符串是错误的,这就是为什么它给你一个语法错误:
string insertData = "UPDATE Test SET AvailableQty = @Qty WHERE ItemCode = @ItemCode";
请尽量避免使用String
类:看这里
您有错误的更新查询更改您的查询
String insertData = "UPDATE Test SET AvailableQty = @Qty Where ItemCode = @ItemCode";
更多信息请点击这里
对于从database
获取availableQty
使用select查询,如
Select availableQty from tablename where `use here primary value column and it's value'
就像我有id
作为主列的值1
,然后我写
Select availableQty from tablename where id = 1
得到值后,可以很容易地减去
double substractval = availableQty - dataGridView2.Rows[i].Cells[4].Value;
现在最后使用您的update
查询,如
Update tablename set availableQty = '"+substractval +"' where "pass primary column and value
你必须使用这种类型的场景。希望你能理解并为你工作。