我将Excel文件导入ASP.NET DataTable。有些值是空白的,特别是在索引2和3处,我想将这些空白字段设置为0
。
调试时,row.item(2)
和row.item(3)
的值均为System.DBNull
。有趣的是,程序输入If
语句并将row.item(2)
值设置为0,但它从不输入ElseIf
语句。到底是怎么回事?这是我的代码:
If row.Item(2) Is Nothing OrElse row.Item(2).ToString = "" OrElse IsDBNull(row.Item(2)) Then
dt.Rows.Item(i).SetField(2, 0)
ElseIf row.Item(3) Is Nothing OrElse row.Item(3).ToString = "" OrElse IsDBNull(row.Item(3)) Then
dt.Rows.Item(i).SetField(3, 0)
End If
编辑:
Per Tim的建议,我修改了我的代码如下:
If Not row.Field(Of Int32?)(2).HasValue Then
dt.Rows.Item(i).SetField(2, 0)
End If
If Not row.Field(Of Int32?)(3).HasValue Then
dt.Rows.Item(i).SetField(3, 0)
End If
但是,这会引发错误 - Object cannot be cast from DBNull to other types
调试时,在第一个循环中:
row.Item(2) = 17
row.Item(3) = 1
理论上,它应该跳过这个迭代并继续下一个。但是,我的程序立即捕获异常并出现上述错误。
答案 0 :(得分:8)
由于您的if
正在执行,您的else if
将无法执行。
如果您希望else if
逻辑执行,即使您的if
已执行,只需将其设为自己的if
块:
If row.Item(2) Is Nothing OrElse row.Item(2).ToString = "" OrElse IsDBNull(row.Item(2)) Then
dt.Rows.Item(i).SetField(2, 0)
End If
If row.Item(3) Is Nothing OrElse row.Item(3).ToString = "" OrElse IsDBNull(row.Item(3)) Then
dt.Rows.Item(i).SetField(3, 0)
End If
答案 1 :(得分:1)
您不提供样本数据,因此我们只需要猜测。但我的猜测是你需要两个If语句..而不是ElseIf。 ElseIf仅评估If语句是否返回false。