Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.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
.net 检查DBNull会引发StrongTypingException_.net_Vb.net_Dbnull - Fatal编程技术网

.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