如何将 Nullable DateTime 变量的 null 值转换为 DbNull.Value

Posted

技术标签:

【中文标题】如何将 Nullable DateTime 变量的 null 值转换为 DbNull.Value【英文标题】:How to Convert a Nullable DateTime variable's null value to DbNull.Value 【发布时间】:2012-01-29 22:40:54 【问题描述】:

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

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

但如果它没有值,插入会因错误而中断。

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

(附注:Sql 列也可以为空。)

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

【问题讨论】:

你得到什么错误?我相信您可以交替使用nullDBNull.Value @Yuck - 我认为您不能互换使用这两者,或者至少,您不能与所有数据库提供商一起使用。在将空值插入数据库时​​,您应该使用 DBNull.Value。处理 null 与 DBNull.Value 时语义略有不同:null 指的是无效的对象引用,而 DBNull.Value 指的是数据库行中的未知值。看起来像头发分裂,但这是我能看到的最好的区别。 @mjd79 它适用于SqlDbCommand,可能只是不适用于DbCommand 【参考方案1】:

试试这个

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

【讨论】:

【参考方案2】:

试试null coalescing operator:

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

【讨论】:

我有点惊讶这不是由数据库提供者处理的。

以上是关于如何将 Nullable DateTime 变量的 null 值转换为 DbNull.Value的主要内容,如果未能解决你的问题,请参考以下文章

Expression.Equal - 如何比较 Nullable 和 Non Nullable 字段?

在三元运算中将 null/Nullable 分配给 DateTime

ObjectResult<Nullable<System.DateTime>> 没有得到存储过程结果

将“null”值赋给Nullable 单行“如果”

c#如何将null值附值decimal类型变量

如何将 DateTime 转换为 VarChar