C# DateTimeSqlNullValueException: Data is Null
本文关键字:is Null Data DateTimeSqlNullValueException | 更新日期: 2023-09-27 18:28:31
我启动MySQL查询,查询到一个具有一个DateTime对象值的列表。当这个列表建立时,它会碰到一个空值和---DateTimeSqlNullValueException: Data is Null
。
首先,我天真地尝试使用ISNULL
、!=NULL
、==NULL
。。。它们不是DateTime对象的方法。然后我尝试了
queryResult.EventTime = rdr.GetDateTime("timeIn");
if (Convert.IsDBNull(rdr.GetDateTime("timeIn")))
{
Console.Write("yeup it's null");
queryResult2.EventTime = DateTime.MinValue;
}
这也没用。
然后我想也许用GetString()
代替rdr.GetDateTime()
,用字符串的方法测试null,然后把它改回DateTime
,设置为DateTime.MinValue
,这样我以后就可以在视图中处理它了。因此,我一直在寻找一个可以测试rdr.GetDateTime("timeIn");
的零度并将其设置为DateTime.MinValue
在知道值不为空之前,不要使用GetDateTime
:
if (rdr.IsDBNull(rdr.GetOrdinal("timeIn"))))
{
Console.Write("yeup it's null");
queryResult2.EventTime = DateTime.MinValue;
}
else
{
queryResult.EventTime = rdr.GetDateTime("timeIn");
}
您可以编写一个扩展方法来进行检查,从而使其成为一行代码(未经测试的代码,但应该会给出想法):
public static GetDateTimeOrDefault(this IDataReader dr, string columnName, DateTime defaultValue)
{
int ordinal = dr.GetOrdinal(columnName);
if (dr.IsDbNull(ordinal))
{
return defaultValue;
}
return dr.GetDateTime(ordinal);
}
然后你可以这样称呼它:
queryResult.EventTime = rdr.GetDateTimeOrDefault("timeIn",DateTime.MinValue);
您不需要传入默认值,但这样做是个好主意,因为如果数据库字段为null,那么您可以从调用站点控制指定所需的值,并且调用站点是您知道所需值的位置。您可能并不总是想要DateTime.MinValue
,有时可能想要DateTime.Now
,例如