我将一个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
编辑:
根据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
然而,这会抛出一个错误--无法将DBNull转换为其他类型
在调试时,在第一个循环中:
row.Item(2) = 17
row.Item(3) = 1
理论上,它应该跳过此次迭代并继续下一个。 然而,我的程序立即捕获了上述错误的异常。
If Not row.Field(Of Int32?)(2).HasValue row.SetField(2, 2) End If
。 - Tim Schmelter