C#更新数据库

时间:2013-02-10 10:42:55

标签: c# database sql-update

我正在使用此字符串来更新数据库,在这种情况下,它工作正常。它会在最后一行更新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)";

我该怎么做?

2 个答案:

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