我正在使用此字符串来更新数据库,在这种情况下,它工作正常。它会在最后一行更新Znesek_nakupa
:
string sqlUpd = "UPDATE Racun SET Znesek_nakupa='10' WHERE Id_racun= (SELECT MAX(Id_racun) FROM Racun)";
但是当我试图插入变量而不仅仅是10时,它会给我错误:
将数据类型varchar转换为数字时出错。
代码示例:
double totalPrice = 1.1;
string sqlUpd = "UPDATE Racun SET Znesek_nakupa='totalPrice' WHERE Id_racun= (SELECT MAX(Id_racun) FROM Racun)";
我该怎么做?
答案 0 :(得分:3)
这个问题与SQL关系不大,更多与在C#中使用字符串和变量有关。
为了在C#中的字符串中插入变量的值,您不能只将变量的名称放在字符串中。字符串不“知道”它包含变量。以下是一些可行的方法:
double totalPrice = 1.1;
// string concatenation
string sqlUpd =
"UPDATE Racun SET Znesek_nakupa='" +
totalPrice +
"' WHERE Id_racun= (SELECT MAX(Id_racun) FROM Racun)";
// with string.Format
string sqlUpd = string.Format(
"UPDATE Racun SET Znesek_nakupa='{0}' WHERE Id_racun= (SELECT MAX(Id_racun) FROM Racun)",
totalPrice);
但是,在这样的SQL查询中嵌入变量值的方法不被视为最佳实践,因为它会冒SQL注入攻击的风险。通常你会想要使用parameterised SQL queries。
您的查询的参数化版本将如下所示(从链接到上面的页面中提取示例):
SqlConnection conn = new SqlConnection(_connectionString);
conn.Open();
string s = "UPDATE Racun SET Znesek_nakupa='@totalPrice' WHERE Id_racun= (SELECT MAX(Id_racun) FROM Racun";
SqlCommand cmd = new SqlCommand(s);
cmd.Parameters.Add("@totalPrice", totalPrice);
SqlDataReader reader = cmd.ExecuteReader();
答案 1 :(得分:0)
好的,我明白了。 当我尝试在数据库中保存变量totalPrice时会出现错误,因为C#将逗号作为分隔符。在数据库中,我必须发送点代替。所以我简单地用点替换逗号,现在它完美无缺。
所以代码现在看起来像这样:
string sqlUpd = "UPDATE Racun SET Znesek_nakupa='" + Convert.ToString(totalPrice).Replace(',', '.') + "' WHERE Id_racun= (SELECT MAX(Id_racun) FROM Racun)";