在已经可用的列中向数据库添加值时发出问题

时间:2014-02-06 12:42:28

标签: c# sql database winforms

我正在创建一个数据库查询,当我向数据库添加数据时,它正在使用我插入的值更新所有行。代码:

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,因为我必须在商品代码中提供字母字符。

2 个答案:

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