我没有要插入MaxPrice或MinPrice列的值,这些值可以为null。它们不存在时的值最初在生成的Sql表达式中被视为,。我之前遇到语法错误,并将代码更改为此
(setItem.MinPrice.ToString()!="")?setItem.MinPrice.ToString() : null,
(setItem.MaxPrice.ToString() != "") ? setItem.MaxPrice.ToString() : null
但是当我执行此操作时,我收到错误并且sql仍然看起来像,。列是十进制的,但可以为NULL。
答案 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"