我正在使用数据集从数据库中获取数据。连续的一个字段是 NULL. 。我知道这个。但是,以下vb.net代码抛出 StrongTypingException (在数据集设计器中的自动化get_somefield()方法中):

If Not IsDBNull(aRow.SomeField) Then
'do something
End If

根据文件和 这个问题 应该没事的。

编辑: If aRow.SomeField is DBNull.Value Then 还返回相同的错误。 argh。

有帮助吗?

解决方案

不同之处在于,在相关问题中,它是在谈论一个未型价值(即 object)通过索引器。当你通过 .SomeField, ,该类型已经包括在内 - 因此可能是 int 等等,尝试没有意义 IsDBNullint, ,作为 int 能够 绝不DBNull.

本质上是 SomeField 是包装纸(请原谅C#Accent ...)

public int SomeField {
    get { return (int) this["someFieldName"]; }
    set { this["someFieldName"] = value; }
}

我不是一个巨大的 DataTable 人,但是您可以尝试通过名称/索引/列检查它;或将列标记为无效,以便它 Nullable<int> (在上面的示例中)。

其他提示

只是一些其他信息:例外是因为您正在使用 强烈键入数据集. 强烈的typingexception 文档说:

当用户访问dbNull值时,由强键入数据集抛出的异常。

强烈键入的数据集的使用与未经类型的数据集的使用略有不同。使用强大的数据集,您会自动获得一些可以调用的字段的扩展/附加方法。在您的情况下,您很可能不得不致电:

If Not aRow.IsSomeFieldNull Then
   'do something
End If

尝试以下操作:AROW.ISSOMEFIELDNULL

有一种整洁的方式。但是您需要意识到后果。

为了防止例外情况,您可以将数据集字段属性nullvalue更改为“ null”或“空”(无论适合您的需求)。默认设置为“抛出异常”。

有关参考查看此处: MSDN文档

祝你好运。

**DateTime? ToDate = (row.IsToDateNull()) ? null : row.IsToDate;**

这个问题是旧的,但是我添加的内容似乎并不是其他任何答案。

如果您使用

If Not IsDBNull(aRow.item("SomeField")) Then
    'do something
End If

即使您使用的是强大的数据集,这也不会引发异常

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top