如何将 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);
【问题讨论】:
你得到什么错误?我相信您可以交替使用null
和DBNull.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