2014-12-11 4 views
1

У меня проблема с методом IsDBNull. Это мой код:VB Net IsDBNull issue

Dim a as Bool= IIf(IsDBNull(reader("field")), _ 
         False, _ 
         Convert.ToBoolean(reader("field"))) 

Код выше должен возвращать ложных если столбец является ложным, но я получаю исключение:

невозможно отливать DBNull к другим типам.

Convert.ToBoolean терпит неудачу

+0

Возможный дубликат [VB.NET: как использовать coalesce с значениями столбца db и типами NULL? Или есть лучшее решение?] (Http://stackoverflow.com/questions/8436677/vb-net-how-do-i-use-coalesce-with-db-column-values-and-nullable-types-or -is-th) –

+0

Не согласны с тем, что Q как дубликат: этот вопрос касается приведения 'nothing' (' null') в нужный тип null; это примерно порядок оценки. – Richard

ответ

2

Все аргументы Iif оцениваются при вызове, будут ли они использоваться или нет.

В этом отношении это не эквивалент условному оператору C# (который оценивает только булевское подвыражение и одну из двух других субэкстракций).

Вам необходимо использовать VB.Net's If, который делает ленивую оценку.

1
If(IsDBNull(reader("field"))) then 
return False 

else 

Convert.ToBoolean(reader("field"))) 

end if 

IIF также будет оценивать неисправную деталь.