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