带有参数的SqlCommand接受不同的数据格式

时间:2019-06-06 16:15:48

标签: c# sql-server

想象一下这段代码:

string value = "1.23";
string query = "UPDATE MYTABLE SET COL1=@p1";

SqlCommand cmd = new SqlCommand(query, connection);
cmd.Parameters.AddWithValue("@p1", value);

cmd.ExecuteNonQuery();

在我的数据库中,如果COL1是十进制类型列,它将与value =“ 1.23”一起使用。但是,如果值是“ 1,23”(逗号而不是点作为小数点),它将失败。错误是

  

将数据类型nvarchar转换为数字时出错

我希望在两种情况下都可以使用“ value”作为字符串变量。

不幸的是,我不能只用逗号代替点,因为此代码将更加通用,同时处理numericvarchar

查询是否可以通过点和逗号将数字形式的参数接受为字符串并正确地放入表中?

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

如果该值在语义上不是字符串,则不应将其作为string发送。参数值的类型很重要,它会影响参数的传输方式,并且会导致文化问题(逗号与点等)。

如果该值在语义上为十进制,则使用类似以下内容的

string value = "1.23";
var typedValue = decimal.Parse(value); // possible specifying a culture-info
//...
cmd.Parameters.AddWithValue("@p1", typedValue);

那么它应该可靠地工作。


不相关,但是您可以使用“ Dapper”之类的工具使ADO.NET更加容易:

connection.Execute("UPDATE MYTABLE SET COL1=@typedValue", new { typedValue });