我有一个试图使用DbParameter
插入到字段中的DateTime?
。我像这样创建参数:
DbParameter datePrm = updateStmt.CreateParameter();
datePrm.ParameterName = "@change_date";
然后我想把DateTime?
的值放到dataPrm.Value
中,同时考虑null
s。
我以为一开始我会很聪明:
datePrm.Value = nullableDate ?? DBNull.Value;
但是失败了,错误如下
运算符'??‘不能应用于'System.DateTime?‘类型的操作数和'System.DBNull‘
所以我猜只有当第二个参数是第一个参数的不可空版本时,它才有效。因此,我选择了:
datePrm.Value = nullableDate.HasValue ? nullableDate.Value : DBNull.Value;
但这也不起作用:
无法确定条件表达式的
类型,因为'System.DateTime‘和'System.DBNull’之间没有隐式转换
但我不想在这些类型之间进行转换!
到目前为止,我唯一能做的就是:
if (nullableDate.HasValue)
datePrm.Value = nullableDate.Value;
else
datePrm.Value = DBNull.Value;
这真的是我写这篇文章的唯一方法吗?有没有办法让使用三元运算符的一行程序工作?
更新:我真的不明白为什么??版本不起作用。MSDN说:
The ??如果运算符不为空,则返回左操作数,否则返回右操作数。
那正是我想要的!
Update2:,这在最后是很明显的:
datePrm.Value = nullableDate ?? (object)DBNull.Value;
https://stackoverflow.com/questions/218808
复制相似问题