DB-异常中不存在行

时间:2010-10-25 15:14:24

标签: .net asp.net vb.net

我们有一个数据集 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个月。

2 个答案:

答案 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)) 

如果有的话,请告诉我你的建议。