如何使用 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"] ;
我已经在我的模型和数据库中声明了一个可为 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"] ;