0

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

我怎样才能做到这一点?

4

2 回答 2

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 注入攻击的风险。通常你会想要使用参数化的 SQL 查询

您的查询的参数化版本如下所示(从上面链接的页面中提取示例):

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();
于 2013-02-10T10:45:58.037 回答
0

好,我知道了。当我尝试在数据库中保存变量 totalPrice 时出现错误,因为 C# 有逗号作为分隔符。在数据库中,我必须改为发送点。所以我简单地用点替换逗号,现在它完美无缺。

所以代码现在看起来像这样:

string sqlUpd = "UPDATE Racun SET Znesek_nakupa='" + Convert.ToString(totalPrice).Replace(',', '.') + "' WHERE Id_racun= (SELECT MAX(Id_racun) FROM Racun)";
于 2013-02-10T16:08:12.800 回答