我们有一个数据集 dsActualCost ,它在一列中提取查询值: MonthName ,在另一列中提取 Cost 。
我们有一个以表格格式显示数据的代码。
For MonthIndex = 0 To dsMonth.Tables(0).Rows.Count - 1
Dim tdMonthlycost As New TableCell
If dsActualCost.Tables(0).Rows.Count > 0 Then
If IsDBNull(dsActualCost.Tables(0).Rows(MonthIndex).Item(1)) Then
tdMonthlycost.Text = 0
Else
tdMonthlycost.Text = dsActualCost.Tables(0).Rows(MonthIndex).Item(1)
End If
Else
tdMonthlycost.Text = 0
End If
trBody.Cells.Add(tdMonthlycost)
Next
此代码在执行时工作正常
我们在所有行中都有数据
我们根本没有数据
但它为所有其他案件提供了例外。 当我搜索DB中没有的任何行时,我尝试调试并发出问题。
假设数据集在2月份只有2行,所以当它执行行
时
IsDBNull以便(dsActualCost.Tables(0).Rows(2).Item(1))
它抛出Db null异常。
请建议我该如何处理它。循环将持续12个月。
答案 0 :(得分:1)
你不应该检查:
If dsActualCost.Tables(0).Rows.Count > 0 And
MonthIndex < dsActualCost.Tables(0).Rows.Count
如果没有检查,如果MonthIndex
引用不存在的位置,则可以索引Rows数组。
答案 1 :(得分:0)
现在是代码。如果您有任何建议,请告诉我:
Dim Flag As Integer = 0
For MonthIndex = 0 To dsMonth.Tables(0).Rows.Count - 1
Dim tdMonthly As New TableCell
Dim CostMonth As Integer
Dim CostValue As Integer
If (dsActualCost.Tables(0).Rows.Count > 0) Then
If (Flag <> dsActualCost.Tables(0).Rows.Count) Then
CostMonth = dsActualCost.Tables(0).Rows(Flag).Item(1)
CostValue = dsActualCost.Tables(0).Rows(Flag).Item(0)
If (dsMonth.Tables(0).Rows(MonthIndex).Item(0) = CostMonth Or (dsMonth.Tables(0).Rows(MonthIndex).Item(0) - 1 = CostMonth)) Then
tdMonthly.Text = CostValue
Flag = Flag + 1
Else
tdMonthly.Text = 0
End If
Else
tdMonthly.Text = 0
End If
Else
tdMonthly.Text = 0
End If
trBody.Cells.Add(tdMonthly)
Next
dsMonth数据集中的月份是一个整数,仅显示偶数(如Jan-2,Feb-4等)。但是,dsActual中的月份显示1月份为1,2,而1月份为3,4。这就是我放
的原因 If (dsMonth.Tables(0).Rows(MonthIndex).Item(0) = CostMonth
Or (dsMonth.Tables(0).Rows(MonthIndex).Item(0) - 1 = CostMonth))
如果有的话,请告诉我你的建议。