如何检查空值或零

时间:2012-10-18 08:13:35

标签: vb.net

使用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代码帮助

4 个答案:

答案 0 :(得分:3)

您应始终使用AndAlsoOrElse代替AndOr。 使用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