Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 为什么这个程序没有输入我的ElseIf语句--System.DBNull_Asp.net_Vb.net_If Statement_Dbnull - Fatal编程技术网

Asp.net 为什么这个程序没有输入我的ElseIf语句--System.DBNull

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

我将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)) 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:明天将查看,现在没有时间:)