.net 检查DBNull会引发StrongTypingException
我正在使用数据集从数据库中提取数据。行中的一个字段为.net 检查DBNull会引发StrongTypingException,.net,vb.net,dbnull,.net,Vb.net,Dbnull,我正在使用数据集从数据库中提取数据。行中的一个字段为NULL。我知道这一点。但是,以下vb.net代码抛出一个StrongTypingException(在数据集设计器中自动生成的get\u SomeField()方法中): 如果不是IsDBNull(aRow.SomeField),则 “做点什么 如果 根据文件和它应该是罚款 编辑:如果aRow.SomeField为DBNull.Value,则也会返回相同的错误。Argh.不同之处在于,在相关问题中,它是通过索引器讨论非类型值(即对象)。当您通
NULL
。我知道这一点。但是,以下vb.net代码抛出一个StrongTypingException
(在数据集设计器中自动生成的get\u SomeField()方法中):
如果不是IsDBNull(aRow.SomeField),则
“做点什么
如果
根据文件和它应该是罚款
编辑:
如果aRow.SomeField为DBNull.Value,则
也会返回相同的错误。Argh.不同之处在于,在相关问题中,它是通过索引器讨论非类型值(即对象
)。当您通过.SomeField
时,类型已经包含在内-因此这可能是int
等,在int
上尝试IsDBNull
是没有意义的,因为int
可以永远DBNull
本质上,SomeField
是(请原谅C#重音…)的包装器
我不是一个庞大的DataTable
人,但你可以试着用名称/索引/列来检查它;或者将列标记为可为空,使其可为空(在上面的示例中)。尝试以下操作:
aRow.IsSomeFieldNull只是一些附加信息:出现异常是因为您使用的是强类型数据集。文件表明: 当用户访问DBNull值时,强类型数据集引发的异常 强类型数据集的使用与非类型数据集的使用略有不同。使用强类型数据集,您可以为字段自动获得一些可调用的扩展/附加方法。在您的情况下,您很可能需要致电:
If Not aRow.IsSomeFieldNull Then
'do something
End If
有一种巧妙的方法可以绕过它。但你需要意识到后果 为了防止发生异常,您可以将DataSet字段属性NullValue更改为“Null”或“Empty”(任何适合您需要的内容)。默认设置为“抛出异常” 有关参考信息,请参见:
祝你好运。这个问题很老了,但我要补充的似乎不在任何其他答案中
**DateTime? ToDate = (row.IsToDateNull()) ? null : row.IsToDate;**
如果你使用
If Not IsDBNull(aRow.item("SomeField")) Then
'do something
End If
即使您使用的是强类型数据集,这也不会引发异常谢谢,伙计。该行试图将null强制转换为默认null行为为“throw exception”的列。数据集让我痛苦。这是最简单的。
**DateTime? ToDate = (row.IsToDateNull()) ? null : row.IsToDate;**
If Not IsDBNull(aRow.item("SomeField")) Then
'do something
End If