Метод IIf не работает с IsDBNull(Guid.empty)

Например,

Dim Test as Guid 

Test = IIf(IsDBNull(DataReader("ID")), Guid.Empty, DataReader("ID"))

Они вызвали ошибку - "Неопознанный формат guid"

Я пытался сделать оператор if ниже

If(IsDBull(DataReader("ID")) Then
   Test = Guid.Emtpy
Else
   Test = DataReader("ID")
End If

Это сработало для меня.

Есть ли в фреймворке 4.0 проблема с методом IIf, обрабатывающим пустое значение guid или непустое значение guid?


person Chi Ming Pun    schedule 12.06.2015    source источник


Ответы (2)


логически ваши коды одинаковы и должны работать в обоих направлениях. да, я думаю, что это проблема в версии 4.0, но вы попробуйте и таким образом

Test = IIf(IsDBNull(DataReader("ID"))=true, Guid.Empty, DataReader("ID"))
person Sajed    schedule 11.07.2015

Функция IIf не использует ускоренную оценку, она всегда вычисляет все три аргумента. Это означает, что даже если IsDBNull(DataReader("ID")) соответствует истине, DataReader("ID") все еще оценивается и является вероятной причиной вашей ошибки.

По крайней мере, так было с тех пор, как появился VB.Net, так что это не проблема фреймворка.

person Major Byte    schedule 11.07.2015