如何使用 SQL 数据 Reader 回读可为 null 的 DateTime?

How to read back a nulllable DateTime using SQL Data Reader?

我已经在我的模型和数据库中声明了一个可为 null 的 DateTime? NextUpdate属性。

我可以在我的数据库上更新 DateTime 值,因为它允许此字段为 null。

但是当我尝试使用 SQL 数据 Reader 从数据库中 获取 字段 NextUpdate 的值时,它会爆炸,因为NextUpdate 的值为空。

我确实尝试使用以下赋值初始化 NextUpdate 值(如果它为空),但仍然抛出错误,告诉我该字段为空:

NextUpdate = dataReader.GetDateTime(dataReader.GetOrdinal("NextUpdate")) != null ? dataReader.GetDateTime(dataReader.GetOrdinal("NextUpdate")) : DateTime.MinValue,

错误:

Data is Null. This method or property cannot be called on Null values -  at System.Data.SqlClient.SqlBuffer.get_DateTime()

问题:

是否有一种简短的方法来回读和初始化可为空的 **DateTime?** 值?

代码:

using (IDataReader dataReader = db.ExecuteReader(dbCommand))
{
   if (dataReader.Read())
   {
      esc = new Escalation
      {
          NextUpdate = dataReader.GetDateTime(dataReader.GetOrdinal("NextUpdate")),
          RootCause = dataReader["RootCause"] != null ? dataReader["EM"].ToString() : ""
      };
   }
}

属性 型号:

    public DateTime? NextUpdate { get; set; }

将值与 DBNull.Value 而不是 null 进行比较:

NextUpdate = dataReader["NextUpdate"].Equals(DBNull.Value) ? (DateTime?)null : (DateTime?)dataReader["NextUpdate"]

(假设 NextUpdate 成员是 DateTime?

试试下面的表达式:

RootCause = (dataReader["RootCause"] is DBNull) ? (DateTime?)null :  (DateTime?)dataReader["RootCause"] ;