嵌套循环问题

时间:2019-08-18 17:16:30

标签: vb.net-2010

运行代码时出现以下错误,当代码开始循环时,我在两个表之间进行了嵌套循环,但是在表2中结束时,出现了以下错误

未为字符串“ 9”定义运算符'=',并键入'DBNull'。

    Do While Not rs1.EOF()
        Do While Not rs2.EOF()
        If rs1("Number").Value = rs2("CDNumber").Value Then
                rs1("Matched").Value = "Yes"
                rs1.Update()
                rs2.MoveFirst()
                rs1.MoveNext()

            End If
            rs2.MoveNext()
        Loop
    Loop

2 个答案:

答案 0 :(得分:0)

我相信会出现此错误,因为在某些时候,您的循环试图比较字符串和空值。我不认为这是有效的比较。检查您的数据集是否为NULL值。

它可能发生在以下行:If rs1("Number").Value = rs2("CDNumber").Value Then

相关链接:
VB.Net DBNull and String error

答案 1 :(得分:0)

尝试以下代码:

检查计算中使用的数据是否为NULL总是明智的。例如:

 IIF(IsDBNull(MyValue),0,MyValue)

如果MyValue为null,则返回零,否则返回零。

Do While Not rs1.EOF()
    Do While Not rs2.EOF()
    If     
IIF(IsDBNull(rs1("Number").Value),0,rs1("Number").Value) =IIF(IsDBNull(rs2("CDNumber").Value),0,rs2("CDNumber").Value)   Then
            rs1("Matched").Value = "Yes"
            rs1.Update()
            rs2.MoveFirst()
            rs1.MoveNext()

        End If
        rs2.MoveNext()
    Loop
Loop

解决方案2:使用If条件为IsDbNull值添加额外的验证。

Do While Not rs1.EOF()
    Do While Not rs2.EOF()
        If NOT IsDbNull(rs1("Number")) And Also  NOT IsDbNull(rs2("CDNumber")) Then
            If IIF(IsDBNull(rs1("Number").Value),0,rs1("Number").Value) =IIF(IsDBNull(rs2("CDNumber").Value),0,rs2("CDNumber").Value)   Then
                    rs1("Matched").Value = "Yes"
                    rs1.Update()
                    rs2.MoveFirst()
                    rs1.MoveNext()

                End If
        End If
        rs2.MoveNext()
    Loop
Loop

解决方案3:仅对IsDbNull值使用If条件。

Do While Not rs1.EOF()
    Do While Not rs2.EOF()
        If rs1("Number").Value = rs2("CDNumber").Value Then
            rs1("Matched").Value = "Yes"
            rs1.Update()
            rs2.MoveFirst()
            rs1.MoveNext()

        End If
    rs2.MoveNext()
    Loop
Loop