0

我通过ExecuteReader()从 SQL 数据库中读取数据。 没有数据满足条件,但HasRow返回 true。当我尝试从阅读器读取数据时,出现异常: '数据为空。不能对 Null 值调用此方法或属性。

SqlDataReader reader = command.ExecuteReader();     
if (reader.HasRows)
            try
            {
                if (reader.Read())
                {
                        string aa = reader.GetFieldType(0).Name; // aa returns 'DateTime'
                        dateStart.MinDate = reader.GetDateTime(0); //exception on this line
                        dateEnd.MinDate = reader.GetDateTime(0);
                        dateStart.Value = reader.GetDateTime(0);
                }
            }
            finally
            {
               reader.Close();
            }

在此先感谢 Usjwo

4

1 回答 1

0

SqlDataReader如果包含的零索引内的数据DBNull,则不能GetDateTime直接从中使用方法,因为DBNull.Value不能直接转换为DateTime. 在分配给其他属性之前,您可以使用IsDBNull三元运算符和Nullable<DateTime>变量来存储GetDateTime结果(另请参见此示例):

using (SqlDataReader reader = command.ExecuteReader())
{
    if (reader.HasRows)
    {
        try
        {
            while (reader.Read())
            {
                DateTime? minDate = reader.IsDBNull(0) ? (DateTime?)null : reader.GetDateTime(0);
                if (minDate != null)
                {
                    dateStart.MinDate = minDate.Value;
                    dateEnd.MinDate = minDate.Value;
                    dateStart.Value = minDate.Value;
                }
            }
        }
        finally
        {
            reader.Close();
        }
    }
}
于 2017-08-23T03:22:21.153 回答