VB.NET-通过数据表进行迭代越界

时间:2013-07-30 02:36:09

标签: database vb.net winforms for-loop

我一直试图一次遍历两个数据表,使用嵌套for循环来比较它们,但外部循环不会超出条件变量。

query_strg = "my query"
rs = New SqlCommand(query_strg, myconn)
adap.SelectCommand = rs
adap.Fill(dset)
count = dset.Rows.Count
For k = 0 To (count - 1)
    For j = 0 To (dset1.Rows.Count - 1)
    If (dset1.Rows(j)("name2").ToString() =dset.Rows(k)("name1").ToString() 
    OrElse (dset.Rows(k)("name2").ToString() = "General" 
    OrElse (dset.Rows(k)("name2").ToString() = "general" 
    OrElse (dset.Rows(k)("name2").ToString() = "Reports")))) Then
            dset.Tables(0).Rows(k).Delete()
            dset.Tables(0).AcceptChanges()
            count = dset.Tables(0).Rows.Count
        End If
    Next j
Next k

这是我的代码.... dset只包含单列,dset1包含5列。我需要将dset1中的单个列与dset进行比较,如果相等,我需要删除该列,并且还执行了其他必需的比较....

但问题是外部for循环超出了限制,导致其中一个if条件抛出异常为“No row available no no”。类似的东西......

需要知道为什么for循环超出界限,如果没有解决方案......我需要另一个想法来执行此操作。

1 个答案:

答案 0 :(得分:0)

试试这个......

Dim dr, dr1 as DataRow

count = dset.tables(0).Rows.Count
For k = 0 To (count - 1)
    If k > dset1.Tables(0).Rows.Count - 1 Then Exit For

    dr = dset.tables(0).Rows(k)
    For j = 0 To (dset1.Tables(0).Rows.Count - 1)

        dr1 = dset1.tables(0).Rows(j) 
        If (dr1("name2").ToString() = dr("name1").ToString() 
        OrElse (UCase(dr("name2").ToString()) = "GENERAL"             
        OrElse (dr("name2").ToString() = "Reports")))) Then
            dset.Tables(0).Rows(k).Delete()
            dset.Tables(0).AcceptChanges()
            count = dset.Tables(0).Rows.Count

        End If
    Next j
Next k