Asp.net 为什么这个程序没有输入我的ElseIf语句--System.DBNull
我将Excel文件导入到ASP.NET数据表中。有些值是空白的,特别是在索引2和3处,我想将这些空白字段设置为Asp.net 为什么这个程序没有输入我的ElseIf语句--System.DBNull,asp.net,vb.net,if-statement,dbnull,Asp.net,Vb.net,If Statement,Dbnull,我将Excel文件导入到ASP.NET数据表中。有些值是空白的,特别是在索引2和3处,我想将这些空白字段设置为0 调试时,row.item(2)和row.item(3)的值都是System.DBNull。有趣的是,程序输入If语句并将行。项(2)值设置为0,但它从未输入ElseIf语句。发生了什么事?这是我的密码: If row.Item(2) Is Nothing OrElse row.Item(2).ToString = "" OrElse IsDBNull(row.Item(2)) The
0
调试时,row.item(2)
和row.item(3)
的值都是System.DBNull
。有趣的是,程序输入If
语句并将行。项(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强制转换为其他类型
调试时,在第一个循环中:
行项目(2)=17
行项目(3)=1
理论上,它应该跳过这个迭代,继续下一个迭代。但是,我的程序立即捕捉到上述错误的异常。由于您的
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
你没有提供样本数据,所以我们只能猜测。但我猜你需要两个If语句。。不是别的。只有当if语句返回false时,ElseIf才会计算。Wow。这就像编程101,但我失败了。谢谢旁注:最好使用强类型
字段
-扩展方法,该方法还支持可为空的类型。例如:If Not row.Field(Int32的?)(2).HasValue row.SetField(2,2)End If
@TimSchmelter谢谢你的提示。不幸的是,强类型的字段
扩展不适合我。有关详细信息,请参阅主要的帖子编辑。@TimSchmelter刚刚完成键入。@user1496816:明天将查看,现在没有时间:)