为什么执行以下代码:

  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

最佳答案

你是对的。 AndAlso发生短路。

但是,错误是通过调用CurRow("GuyBook")(在调试器中进行验证以确保我不是骗子或做出一些疯狂的假设或只是误记* ;-)而引起的。在请求值之前,您需要询问DataRow if it has a value。也就是说,使用:

CurRow.IsNull("BuyBook")

快乐的编码。

*一个人应该只能与DBNull.Value进行比较或使用IsDBNull。但是,我可以肯定的是,在抛出这些异常之前,我遇到了麻烦,而不是返回DBNull对象。首先在调试器的“立即窗口”中找出确切的表达式引发异常。

10-07 14:56