我正在创建一个数据库查询,当我向数据库添加数据时,它正在使用我插入的值更新所有行。代码:
string SQL = "Update Stock_Entry Set No_of_Items=No_of_Items+" (Convert.ToDecimal(textBox_Stock.Text));
DBConnection database = new DBConnection();
int rslt = database.updatetValues(SQL);
if (rslt > 0)
我发现我遇到了一个严重问题,因为我从未提及要更新哪一行。所以我编辑了我的编码
string SQL = "Update Stock_Entry Set No_of_Items=No_of_Items+" + (Convert.ToDecimal(textBox_Stock.Text)) +
"Where Item_Code="+ textBox_ItemId.Text ;
DBConnection database = new DBConnection();
int rslt = database.updatetValues(SQL);
if (rslt > 0)
此方法给出了一个错误“无法将varchar值转换为int”并提及我的项代码具有varchar值。所以我在删除varchar项代码后尝试了这种方式,当项目代码中没有任何varchar值时,此方法正常工作。但我无法将我的商品代码列保留为int,因为我必须在商品代码中提供字母字符。
答案 0 :(得分:2)
我认为Item_Code是数据库中的Varchar字段?
您需要编辑代码:
string SQL = "Update Stock_Entry Set No_of_Items=No_of_Items+" + (Convert.ToDecimal(textBox_Stock.Text)) +
"Where Item_Code='"+ textBox_ItemId.Text + "'";
因为你想在where子句中使用varchar值,你需要将值放在撇号之间,如下所示:
WHERE Item_Code = 'theitem'
答案 1 :(得分:0)
您当前的代码容易受到SQL Injection攻击。您应该使用SQL参数来保护您的应用程序免受SQL注入:
string sql = @"UPDATE Stock_Entry
SET No_of_Items = No_of_Items + @stock
WHERE Item_Code = @itemId";
然后提供参数值(带有SqlCommand的示例):
command = new SqlCommand(sql);
command.Parameters.AddWithValue("@stock", Convert.ToDecimal(textBox_Stock.Text));
command.Parameters.AddWithValue("@itemId", textBox_ItemId.Text);
command.ExecuteNonQuery();