将空参数插入到十进制可空列中

时间:2018-01-15 16:35:17

标签: c# sql-server

我没有要插入MaxPrice或MinPrice列的值,这些值可以为null。它们不存在时的值最初在生成的Sql表达式中被视为,。我之前遇到语法错误,并将代码更改为此

 (setItem.MinPrice.ToString()!="")?setItem.MinPrice.ToString() : null,
 (setItem.MaxPrice.ToString() != "") ? setItem.MaxPrice.ToString() : null

但是当我执行此操作时,我收到错误并且sql仍​​然看起来像,。列是十进制的,但可以为NULL。

1 个答案:

答案 0 :(得分:2)

使用参数。总是

cmd.Parameters.AddWithValue("@minPrice",
    setItem.MinPrice == null ? DBNull.Value : (object)setItem.MinPrice);
cmd.Parameters.AddWithValue("@maxPrice",
    setItem.MaxPrice == null ? DBNull.Value : (object)setItem.MaxPrice);

或使用像Dapper这样的工具:

// adds "@MinPrice" and "@MaxPrice" correctly as parameters, as long
// as the sql contains those tokens in some way
conn.Execute(sql, new { setItem.MinPrice, setItem.MaxPrice });

错误修复 - 请勿使用 - 将在您的串联中提供文字"null"。有很多理由不这样做:

// bad code; do not use
(setItem.MinPrice.ToString() != "") ? setItem.MinPrice.ToString() : "null",
(setItem.MaxPrice.ToString() != "") ? setItem.MaxPrice.ToString() : "null"