为什么以下代码:
A = not IsDBNull(CurRow("BuyBook")) AndAlso CType(CurRow("BuyBook"), string) = "Yes"
导致以下错误:
Conversion from type 'DBNull' to type 'String' is not valid.
根据这篇文章,AndAlso应该短路:
答案 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在将其与另一个字符串连接时会将其视为空字符串。