1

使用 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

4 回答 4

3

您应该始终使用AndAlsoandOrElse而不是Andand OrAndAlso后一个表达式仅在前一个返回时才被评估true。通过这种方式,您可以避免异常并使您的代码更有效率。

但除此之外,您应该使用reader.IsDBNull(index)

If Not dReader.IsDBNull(11) AndAlso dReader.GetString(11) <> "0" Then

End If
于 2012-10-18T08:17:26.930 回答
0

尝试使用AndAlso

If (dReader.Item(11) IsNot Nothing) AndAlso (cint(dReader.Item(11)) <> 0) Then
    msgbox ("Not NUll or 0")
End if

基本上它的作用是,当第一个表达式已经是 时true,第二个表达式不会被计算。

于 2012-10-18T08:15:37.697 回答
0

这里有两个问题:一个是你使用And而不是AndAlso:前者会导致你的整行被评估,而后者只会评估第二个参数,如果它的第一个参数已经是True

您的第二个问题是您在检查“无”之前检查“非零”,因此您的第一部分可能会在评估第二部分之前失败。

试试这个:

If dReader.Item(11) IsNot Nothing AndAlso dReader.Item(11) <> "0" Then

另外,自从我做 ADO 以来已经有一段时间了,但你不应该检查IsDbNull而不是比较Nothing吗?也许VB会为你处理这个问题,我不确定。

于 2012-10-18T08:19:08.150 回答
0
If Convert.ToString(dReader.Item(11)) <> "0" AndAlso dReader.IsDBNull(11)=False
于 2012-10-18T08:28:09.600 回答