我的ASP.NET应用程序中有2个数据表。我循环遍历它们,如果我找到匹配项,我会从外部数据表中删除该特定行,如下所示:
For i As Integer = 0 To dtFixedActs.Count - 1
For j As Integer = 0 To dtTotals.Count - 1
If dtFixedActs.Rows(i).Item("Activity") = dtTotals.Rows(j).Item("Activity") Then
dtFixedActs.Rows(i).Delete()
i += 1
j += 1
End If
Next
dtFixedActs.AcceptChanges()
Next
这种方法很好,除非dtFixedActs只包含1行并且在另一个数据表中找到匹配项。我得到“位置1没有行”错误。这是有道理的,因为i + = 1我想到下一行,这在这种情况下是不可能的。
我试图在第一个循环中移入dtFixedActs.AcceptChanges命令,但无济于事。我还注释掉了i + = 1行,但后来我得到了“删除的行信息无法通过该行访问”。错误。
我不知道如何解决这个问题。当dtFixedActs包含多于1行时,不会发生此问题。
有什么建议吗?
答案 0 :(得分:2)
最奇怪的是,我似乎已经解决了这个问题。我添加了一个try catch异常代码块,如下所示:
For i As Integer = 0 To dtFixedActs.Count - 1
For j As Integer = 0 To dtTotals.Count - 1
Try
If dtFixedActs.Rows(i).Item("Activity") = dtTotals.Rows(j).Item("Activity") Then
dtFixedActs.Rows(i).Delete()
i += 1
j += 1
End If
Catch ex As Exception
End Try
Next
dtFixedActs.AcceptChanges()
Next
现在一切似乎都很好。 有没有人对此有解释,因为我怀疑这是一个有效的解决方案?
答案 1 :(得分:0)
如果找到匹配项dfFixedActs(dtFixedActs.Count - 1),则会出现问题,因为我增加到了边界外。 只是添加了一个条件来防止i或j移出边界,例如i< = dtFixedActs.Count - 1和j< = dtTotals.Count - 1.
答案 2 :(得分:0)
在应用程序中寻找缓慢的性能我发现try / catch是您可以执行的最昂贵的操作之一。在我的测试中,不久前,它需要250毫秒。从那以后,我从不使用try catch,除非作为我从未想过的最终保护措施。即使这样,我也会安排记录错误,以便能够直接识别和处理特定错误。