2

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

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

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

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

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

4 回答 4

5

它告诉您您不能声明 aNullable<DateTime>并为其分配 aDBNull.Valuenull

您的代码应该是:

DateValue1 = col28Value ==null? (DateTime?)null: Convert.ToDateTime(col28Value)
于 2013-07-12T20:31:52.590 回答
3

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

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

您需要将任一侧投射到object.


但是,这也行不通。
DBNull.Value是用于System.Data.
它与可为空的类型无关。

相反,您需要使用null它自己。
由于null不可转换为DateTime,您还需要将其转换为DateTime?。或者,您可以编写new DateTime?(),这将创建一个空(null)Nullable<DateTime>值。

于 2013-07-12T20:30:50.303 回答
0

与他们一起工作SqlParameter而不是他们的价值。

SqlParameter sp = col28Value == null ? new SqlParameter("@whatever", DBNull.Value) : new SqlParameter("@whatever", col28Value);
于 2013-07-12T20:33:55.560 回答
0

当你这样做时:

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

你可能在做:

DateValue1 = DbNull.Value;

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

于 2013-07-12T20:34:16.703 回答