将DBnull存储在接受null的日期列的数据库中
本文关键字:日期 数据库 null DBnull 存储 | 更新日期: 2023-09-27 18:22:05
我有一个DateTime
值,我想保存到数据库中。该列允许null数据库中。当我尝试运行下面的代码时,我会收到此错误消息。
无法确定条件表达式的类型,因为存在system.dbnull和system.datetime 之间没有隐式转换
如何为日期列存储null或空值?
public class ExcelData
{
public DateTime? DateValue1 { get; set; }
}
DateValue1 = col28Value == null ? DBNull.Value : Convert.ToDateTime(col28Value)
它告诉您不能声明Nullable<DateTime>
并为其分配与null
不同的DBNull.Value
您的代码应该是:
DateValue1 = col28Value ==null? (DateTime?)null: Convert.ToDateTime(col28Value)
条件运算符要求其一种类型可以转换为另一种类型
它不会试图找到最接近的公共基类型。
由于DBNull
和DateTime
没有任何共同点,所以它失败了。
您需要将任意一侧强制转换为object
。
然而,这也不会奏效DBNull.Value
是用于System.Data
中某些API的特殊对象
它与可为null的类型无关。
相反,您需要使用null
本身
由于null
不能转换为DateTime
,因此还需要将其强制转换为DateTime?
。或者,您可以编写new DateTime?()
,这将创建一个空(null)Nullable<DateTime>
值。
使用SqlParameter
而不是它们的值。.
SqlParameter sp = col28Value == null ? new SqlParameter("@whatever", DBNull.Value) : new SqlParameter("@whatever", col28Value);
执行此操作时:
DateValue1 = col28Value == null ? DBNull.Value : Convert.ToDateTime(col28Value)
你可能正在做:
DateValue1 = DbNull.Value;
这是不可能的。因此,将DbNull.Value替换为null