如何在VB中正确检查DBNull?

时间:2012-01-13 07:13:58

标签: asp.net .net vb.net sql-server-2008

为什么以下代码:

  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 个答案:

答案 0 :(得分:10)

你是对的。 AndAlso正在短路。

然而,错误来自于调用 CurRow("GuyBook")(在调试器中验证这一点,以确保我不是骗子或做出一些疯狂的假设或只是错误记忆* ;-)。在您要求输入值之前,您需要询问DataRow if it has a value。也就是说,使用:

CurRow.IsNull("BuyBook")

快乐的编码。


*一个应该能够与DBNull.Value进行比较或使用IsDBNull。但是,我很确定在抛出这些异常而不是返回DBNull对象之前遇到了一行。首先找出 - 在调试器的立即窗口中 - 完全哪个表达式抛出异常。

答案 1 :(得分:4)

您是否尝试过这样比较:

If CurRow("BuyBook") Is DBNull.Value Then
     '...
End If

答案 2 :(得分:0)

而不是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"

答案 3 :(得分:0)

If dt.Rows(0)("BuyBook") = DBNull.Value Then
End If

希望它有所帮助。

答案 4 :(得分:-1)

在vb.net中,我通常会这样做:

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

vb6时代的老把戏。如果CurRow("BuyBook")为null,则vb.net在将其与另一个字符串连接时会将其视为空字符串。