【问题标题】:How to handle null for a allow-null datetime field (DB) in our program?如何在我们的程序中处理允许空日期时间字段 (DB​​) 的空值?
【发布时间】:2009-08-29 08:58:39
【问题描述】:

我们如何在 c# 程序中处理日期时间字段(从 SQL Server 获取)的 null?

【问题讨论】:

    标签: c# datetime null


    【解决方案1】:

    这里有3种常用的方法;

    • 如果您在谈论object(可能是从数据读取器获取它),那么DBNull.Value 可以表示空值。不过,我不倾向于将其排除在数据层之外
    • 由于 .NET 1.1 的历史,DateTime.MinValue 通常被解释为null;也许是一个神奇的数字 - 但它可以工作并且受到大多数数据绑定等的支持
    • 在 .NET 2.0 中,Nullable<T> 表示您可以使用 DateTime? - 即可以为空的 DateTime;只需使用DateTime?,无论您的意思是可以为空的DateTime,您都可以给它一个值null 或一个有效的DateTime

    关于数据访问和空值的一些其他想法:

    • 当传递给SqlCommand 时,您必须使用DBNull.Value,而不是null - 见下文
    • 从数据阅读器读取时,我倾向于检查reader.IsDbNull(ordinal)

    命令的东西(以Nullable<T>为例):

    param.Value = when.HasValue ? (object)when.Value : DBNull.Value;
    

    【讨论】:

      【解决方案2】:

      使用DateTime?

      具体来说,你遇到了什么问题?

      -- 编辑

      很清楚,这是一个Nullable DateTime 对象,不是问题:)

      DateTime? t = null;
      

      -- 编辑

      回复评论,检查如下:

      DateTime? theTime;
      
      if( table["TheColumn"] == DBNull.Value ){
          theTime = null;
      } else {
          theTime = (DateTime) table["TheColumn"];
      }
      

      【讨论】:

      • 我无法将对象(DataRow 的一列)转换为 DateTime。
      • 通过编辑回复。你只需要检查它是否等于DBNull.Value
      • 好的......您可能想发布您解决问题的方法并将其标记为已接受,以便其他搜索的人有所帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      • 2021-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多