繁体   English   中英

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

[英]Store DBnull in database for date column that accepts null

我有一个DateTime值,我想保存到数据库。 该列允许数据库中为null。 当我尝试运行下面的代码时,我收到此错误消息。

无法确定条件表达式的类型,因为system.dbnull和system.datetime之间没有隐式转换

如何为日期列存储空值或空值?

public class ExcelData
{
  public DateTime? DateValue1 { get; set; }
}

DateValue1 = col28Value == null ? DBNull.Value : Convert.ToDateTime(col28Value)

它告诉你,你不能声明Nullable<DateTime>并为它赋予一个与nullDBNull.Value

您的代码应该只是:

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

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

由于DBNullDateTime没有任何共同之处,因此失败了。

你需要将任何一方投射到object


但是,这也行不通。
DBNull.Value是一个特殊对象,用于System.Data某些API。
它与可空类型无关。

相反,您需要使用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;

这是不可能的。 所以用null替换DbNull.Value

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM