Как правильно проверить DBNull в VB? - PullRequest
9 голосов
/ 13 января 2012

Почему следующий код:

  A = not IsDBNull(CurRow("BuyBook")) AndAlso CType(CurRow("BuyBook"), string) = "Yes"

приводит к следующей ошибке:

 Conversion from type 'DBNull' to type 'String' is not valid.

Когда AndAlso также допускает короткое замыкание в соответствии с этой статьей:

http://support.microsoft.com/kb/817250

Ответы [ 5 ]

10 голосов
/ 13 января 2012

Вы правы. AndAlso короткое замыкание.

Тем не менее, ошибка возникает из-за вызова CurRow("GuyBook") (проверьте это в отладчике, чтобы убедиться, что я не лжец, не делаю какие-то сумасшедшие предположения или просто неправильно помню * ;-). Прежде чем запрашивать значение, вам нужно спросить DataRow , имеет ли оно значение . То есть используйте:

CurRow.IsNull("BuyBook")

Удачного кодирования.


* Один должен просто быть в состоянии сравнить с DBNull.Value или использовать IsDBNull. Тем не менее, я вполне уверен, что я столкнулся с рядом до того, как это исключение вместо того, чтобы возвращать объект DBNull. Начните с выяснения - в «Немедленном окне отладчика» - точно , выражение которого выдает исключение.

4 голосов
/ 13 января 2012

Вы пробовали сравнить так:

If CurRow("BuyBook") Is DBNull.Value Then
     '...
End If
0 голосов
/ 13 января 2012
If dt.Rows(0)("BuyBook") = DBNull.Value Then
End If

Надеюсь, это поможет.

0 голосов
/ 13 января 2012

В vb.net я обычно делаю что-то вроде этого:

A = (CurRow("BuyBook") & "" = "Yes")

Старый трюк из эпохи vb6.Если CurRow("BuyBook") равно нулю, vb.net будет рассматривать его как пустую строку при конкатенации с другой строкой.

0 голосов
/ 13 января 2012

Вместо Not IsDBNull (CurRow ("BuyBook")) используйте NOT (CurRow ("BuyBook")) для System.Dbnull.Value). Попробуйте это:

A = (NOT (CurRow("BuyBook")) is System.Dbnull.Value) AndAlso CType(CurRow("BuyBook"), string) = "Yes"

OR

A = not string.IsNullOrEmpty(CurRow("BuyBook")) AndAlso CType(CurRow("BuyBook"), string) = "Yes"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...