将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)

将DBnull存储在接受null的日期列的数据库中

它告诉您不能声明Nullable<DateTime>并为其分配与null 不同的DBNull.Value

您的代码应该是:

DateValue1 = col28Value ==null? (DateTime?)null: Convert.ToDateTime(col28Value)

条件运算符要求其一种类型可以转换为另一种类型
它不会试图找到最接近的公共基类型。

由于DBNullDateTime没有任何共同点,所以它失败了。

您需要将任意一侧强制转换为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