【问题标题】:SqlDataReader no data, but HasRow is trueSqlDataReader 没有数据,但 HasRow 为真
【发布时间】:2017-08-23 02:59:23
【问题描述】:

我通过 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();
            }

提前致谢 乌斯杰沃

【问题讨论】:

标签: c# sql-server sqldatareader no-data


【解决方案1】:

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

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();
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多