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

Я работаю над новым приложением, управляемым данными 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 - ошибка: Аргумент 'Выражение' недопустимзначение.

Ответы [ 3 ]

6 голосов
/ 14 апреля 2011

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

Вам необходимо использовать Если :

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

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

0 голосов
/ 14 апреля 2011

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

0 голосов
/ 14 апреля 2011

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

...