【问题标题】:How to Convert a Nullable DateTime variable's null value to DbNull.Value如何将 Nullable DateTime 变量的 null 值转换为 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

标签: c# sql-server datetime nullable 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);
    

    【讨论】:

    • 我有点惊讶这不是由数据库提供者处理的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多