我有一个IsDBNull方法的问题。 这是我的代码:
Dim a as Bool= IIf(IsDBNull(reader("field")), _
False, _
Convert.ToBoolean(reader("field")))
如果列为false,则上面的代码应该返回 False ,但是我得到了异常:
无法将DBNull转换为其他类型。
Convert.ToBoolean失败
答案 0 :(得分:2)
Iif
的所有参数在被调用时都会被评估,无论它们是否会被使用。
在这方面它与<#>不等同于<#em>到C#的条件运算符(它只计算布尔控制子表达式和其他两个子表达式之一)。
您需要使用VB.Net的If
运算符进行延迟评估。
答案 1 :(得分:1)
If(IsDBNull(reader("field"))) then
return False
else
Convert.ToBoolean(reader("field")))
end if
IIF也将评估失败的部分。