如何将可空DateTime变量的空值转换为DbNull.Value

3

我有一个可空的DateTime变量。我想将它写入SQL数据库。当我尝试插入时:

如果变量有值,就没有问题。

但是如果它没有值,插入会中断并出现错误。

我想问:我们如何通过DbCommand参数将可空DateTime插入到Sql中?

(注:Sql列也是可空的。)

DateTime? myDate = null;
DbCommand dbCommand = new DbCommand();
dbCommand.Parameters.Add("NullableSqlDateField", DbType.DateTime, myDate);

你遇到了什么错误?我相信你可以将 nullDBNull.Value 互换使用。 - Yuck
1
@Yuck - 我认为你不能混用这两个,或者至少在所有数据库提供程序中都不能这样做。插入 null 值到数据库中应该使用 DBNull.Value。在处理 null vs. DBNull.Value 时语义上存在些微差别:null 指的是无效对象引用,而 DBNull.Value 指的是数据库行中的未知值。看起来这有些吹毛求疵,但这是我能找到这种差异的最好理由。 - matt
@mjd79 它可以与 SqlDbCommand 一起使用,也许只是不能与 DbCommand 一起使用。 - Yuck
2个回答

13

试用null 合并运算符

dbCommand.Parameters.Add("NullableSqlDateField", DbType.DateTime, (object) myDate ?? DbNull.Value);

4
有点惊讶这个并不是由数据库提供商处理的。 - George Mauer

0

试试这个

if(myDate.HasValue)
  dbCommand.Parameters.Add("NullableSqlDateField", DbType.DateTime, myDate.Value);
else
  dbCommand.Parameters.Add("NullableSqlDateField", DbType.DateTime, DbNull.Value);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接