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

C# DateTimeSqlNullValueException: Data is Null

的线性函数

知道值不为空之前,不要使用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,例如