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, который кажется пустым, может фактически иметь значение.