我有一个DateTime
值,我想保存到数据库中。该列允许null
在数据库中。当我尝试运行下面的代码时,我收到此错误消息。
由于存在,因此无法确定条件表达式的类型 system.dbnull和system.datetime之间没有隐式转换
如何为日期列存储空值或空值?
public class ExcelData
{
public DateTime? DateValue1 { get; set; }
}
DateValue1 = col28Value == null ? DBNull.Value : Convert.ToDateTime(col28Value)
答案 0 :(得分:5)
它告诉您,您无法声明Nullable<DateTime>
并为其指定DBNull.Value
,这与null
您的代码应该只是:
DateValue1 = col28Value ==null? (DateTime?)null: Convert.ToDateTime(col28Value)
答案 1 :(得分:3)
条件运算符要求其中一种类型可以转换为另一种类型 它不会尝试找到最接近的公共基类型。
由于DBNull
和DateTime
没有任何共同之处,因此失败。
您需要将任意一方投放到object
。
然而,这也行不通。
DBNull.Value
是System.Data
中某些API使用的特殊对象
它与可空类型无关。
相反,您需要使用null
本身
由于null
无法转换为DateTime
,因此您还需要将其转换为DateTime?
。
或者,您可以编写new DateTime?()
,这将创建一个空(null)Nullable<DateTime>
值。
答案 2 :(得分:0)
使用SqlParameter
而不是他们的价值......
SqlParameter sp = col28Value == null ? new SqlParameter("@whatever", DBNull.Value) : new SqlParameter("@whatever", col28Value);
答案 3 :(得分:0)
当你这样做时:
DateValue1 = col28Value == null ? DBNull.Value : Convert.ToDateTime(col28Value)
你可能会这样做:
DateValue1 = DbNull.Value;
这是不可能的。所以用空值
替换DbNull.Value