1

我有一个数据网格,其中有很多行。我只想从其中的一列中提取两列,其中一列将在数据库中搜索具有该值的那一行,第二列将使用新值更新该行。请帮忙。

我的代码给出了语法错误

关键字“VALUES”附近的语法不正确

我的代码

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

                }
            }
        }
4

3 回答 3

0

您有错误的更新查询更改您的查询,例如

String insertData = "UPDATE Test SET AvailableQty = @Qty Where ItemCode = @ItemCode";

欲了解更多信息,请单击此处

对于获取availableQtyfromdatabase使用选择查询,例如

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

您必须使用这种类型的场景。希望您理解并为您工作。

于 2013-05-14T12:35:34.353 回答
0

首先,您应该始终使用参数化查询。这种代码对SQL 注入攻击是开放的。

我认为您误解了Update in的语法T-SQL

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

        }
}
于 2013-05-14T12:37:22.903 回答
0

你的查询字符串是错误的,这就是为什么它给你一个语法错误:

string insertData = "UPDATE Test SET AvailableQty = @Qty WHERE ItemCode = @ItemCode";

请尽量避免使用String该类:看这里

于 2013-05-14T12:37:33.477 回答