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

时间:2013-07-12 20:27:41

标签: c#

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

  

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

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

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

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

4 个答案:

答案 0 :(得分:5)

它告诉您,您无法声明Nullable<DateTime>并为其指定DBNull.Value,这与null

不同

您的代码应该只是:

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

答案 1 :(得分:3)

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

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

您需要将任意一方投放到object


然而,这也行不通。
DBNull.ValueSystem.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