检查dbnull会抛出强烈的typingexception
题
我正在使用数据集从数据库中获取数据。连续的一个字段是 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
等等,尝试没有意义 IsDBNull
在 int
, ,作为 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
即使您使用的是强大的数据集,这也不会引发异常