使用VB.Net
我想检查表行是否为空或0
代码
sCmd = New SqlCommand("SELECT * from table1)", conObjects.myConnection)
dReader = sCmd.ExecuteReader
While dReader.Read()
If dReader.Item(11) <> "0" And dReader.Item(11) IsNot Nothing Then
msgbox ("Not NUll or 0")
End if
End while
将错误显示为“Operator '<>' is not defined for type 'DBNull' and string "0"
”
为什么我收到此错误,如何解决此问题。
需要VB.Net代码帮助
答案 0 :(得分:3)
您应始终使用AndAlso
和OrElse
代替And
和Or
。
使用AndAlso
后一个表达式仅在前者返回true
时进行评估。通过这种方式,您可以避免异常并使您的代码更有效。
但除此之外,你应该使用reader.IsDBNull(index)
:
If Not dReader.IsDBNull(11) AndAlso dReader.GetString(11) <> "0" Then
End If
答案 1 :(得分:0)
尝试使用 AndAlso
If (dReader.Item(11) IsNot Nothing) AndAlso (cint(dReader.Item(11)) <> 0) Then
msgbox ("Not NUll or 0")
End if
基本上它的作用是,当第一个表达式已经true
时,第二个表达式不会被评估。
答案 2 :(得分:0)
这里有两个问题:一个是你使用And
而不是AndAlso
:前者将导致你的整行被评估,后者只会评估第二个参数参数已经是True
。
您的第二个问题是在检查“Nothing”之前检查“not zero”,因此在评估第二部分之前,您的第一部分可能会失败。
请改为尝试:
If dReader.Item(11) IsNot Nothing AndAlso dReader.Item(11) <> "0" Then
此外,自从我做ADO以来已经有一段时间了,但您不应该检查IsDbNull
而不是与Nothing
进行比较吗?也许VB会为你解决这个问题,我不确定。
答案 3 :(得分:0)
If Convert.ToString(dReader.Item(11)) <> "0" AndAlso dReader.IsDBNull(11)=False