SqlDataReader нет данных, но HasRow имеет значение true

Я читаю данные из базы данных SQL с помощью ExecuteReader(). Нет данных, удовлетворяющих условиям, но 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

1 ответ

Если данные внутри нулевого индекса 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();
        }
    }
}
Другие вопросы по тегам