我需要填充SqlCommand
中的参数,但在某些条件下,我想用DBNull.Value
填充它,否则用值填充。
我需要的是,当变量truckID == -1
然后将DBNull.Value
放入参数时,否则将truckID
的值放入其中。
这就是我的尝试:
using (SqlCommand command = new SqlCommand(sql.ToString()))
{
command.CommandType = CommandType.Text;
command.Parameters.AddWithValue("@TruckID", truckID == -1 ? DBNull.Value : truckID);
但是编译器告诉我:
错误CS0173无法确定条件表达式的类型,因为'System.DBNull'和'int'之间没有隐式转换
如果我写这个:
command.Parameters.AddWithValue("@TruckID", truckID == -1 ? 0 : truckID);
然后编译器很高兴。所以对于三元运算符来说,似乎两个可能的值必须是相同的类型。
最好的方法是什么?
编辑:
我的工作代码是:
command.Parameters.Add
(new SqlParameter("@TruckID", SqlDbType.Int).Value = (import.TruckID == -1) ? (object)DBNull.Value : import.TruckID);
修改
实际上上面的代码毕竟不起作用
在运行时我得到了这个:
SqlParameterCollection只接受非null的SqlParameter类型 对象,而不是DBNull对象
所以我将代码修改为此,这最终对我有用。
command.Parameters.Add
(new SqlParameter("@PlaceID", SqlDbType.Int) { Value = (import.TruckID == -1) ? (object)DBNull.Value : import.TruckID });
答案 0 :(得分:2)
您可以尝试这样
SqlParameter param = new SqlParameter("@truckID", System.Data.SqlDbType.Int);
param.Value = (truckID == -1) ? DBNull.Value : truckID;
command.Parameters.Add(param);
一个班轮版本就是
SqlParameter param = new SqlParameter("@truckID", System.Data.SqlDbType.Int)
{ Value = (truckID == -1) ? (object)DBNull.Value : truckID };
command.Parameters.Add(param);
另一个版本:
SqlParameter param = (truckID == -1) ?
new SqlParameter("@truckID", System.Data.SqlDbType.Int) { Value = DBNull.Value }
: new SqlParameter("@truckID", System.Data.SqlDbType.Int) { Value = truckID };
command.Parameters.Add(param);
答案 1 :(得分:1)
您可以明确地将DBNull.Value
投射到对象:
command.Parameters.AddWithValue("@TruckID", truckID == -1 ? (object)DBNull.Value : truckID);