如何在VB中正确检查DBNull?

mer*_*011 9 .net vb.net asp.net sql-server-2008

为什么以下代码:

  A = not IsDBNull(CurRow("BuyBook")) AndAlso CType(CurRow("BuyBook"), string) = "Yes"
Run Code Online (Sandbox Code Playgroud)

导致以下错误:

 Conversion from type 'DBNull' to type 'String' is not valid.
Run Code Online (Sandbox Code Playgroud)

当AndAlso根据这篇文章被认为是短路的时候:

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

小智 10

你是对的.AndAlso是短路的.

然而,错误来自调用 CurRow("GuyBook")(在调试器中验证这一点,以确保我不是骗子或做出一些疯狂的假设或只是误报*;-).在询问值之前,您需要询问DataRow 是否有值.也就是说,使用:

CurRow.IsNull("BuyBook")
Run Code Online (Sandbox Code Playgroud)

快乐的编码.


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


Pon*_*dum 5

你有没有试过这样比较:

If CurRow("BuyBook") Is DBNull.Value Then
     '...
End If
Run Code Online (Sandbox Code Playgroud)