VB.Net - это моя проблема с DataRow.IsNull или Format(datetimevalue,"T")?

Я работаю над новым приложением, управляемым данными ASP.Net 4.0. В DAL я проверяю значения NULL на всех моих данных и по умолчанию на правильные данные, когда NULL. У меня происходит странная проблема. Возвращаются две даты - на одну мне нужно только время. Первая строка кода для полной даты работает без сбоев, но вторая строка кода содержит ошибки, указывающие на строку формата, но странная часть заключается в том, что она допускает ошибки в значениях NULL, которые не используют строку формата и просто возвращают Date.MinValue. Когда вторая строка получает данные, она правильно форматирует результат.

Dim dr As DataRow
.TourDate = IIf(dr.IsNull("tourdate"), Date.MinValue, Format(dr("tourdate"), "MM/dd/yyyy"))

.TourTime = IIf(dr.IsNull("tourtime"), Date.MinValue, Format(dr("tourtime"), "T"))

Ошибка появляется во второй строке, когда dr("tourtime") имеет значение NULL - ошибка: Аргумент 'Expression' не является допустимым значением.

3 ответа

Решение

IIf в VB.Net не выполняется оценка короткого замыкания, поэтому вызов Format выполняется даже при нулевом значении.

Вам нужно использовать, если:

.TourTime = If(dr.IsNull("tourtime"), Date.MinValue, Format(dr("tourtime"), "T"))

Это та же проблема, описанная здесь: при использовании VB.NET IIF я получаю исключение NullReferenceException

Чтобы устранить эту проблему, я бы проверил фактическое значение, сохраненное. Столбец datetime, который кажется пустым, может фактически иметь значение.

Я думаю, что вы должны использовать IsDbNull вместо IsNull.

Другие вопросы по тегам