检查DBNull会抛出StrongTypingException

cal*_*cat 9 .net vb.net dbnull

我正在使用数据集从数据库中提取数据.连续的一个领域是NULL.我知道这个.但是,以下vb.net代码会抛出StrongTypingException(在数据集设计器中的自动生成的get_SomeField()方法中):

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

根据文件和这个问题,它应该没问题.

编辑:If aRow.SomeField is DBNull.Value Then也返回相同的错误.哎呀.

Mic*_*Sim 17

只是一些附加信息:异常是因为您使用的是强类型DataSet.StrongTypingException文档说:

用户访问DBNull值时由强类型DataSet引发的异常.

强类型DataSet的使用与非类型化DataSet的使用略有不同.使用强类型数据集,您可以自动获得可以调用的字段的一些扩展/附加方法.在你的情况下,你很可能不得不打电话:

If Not aRow.IsSomeFieldNull Then
   'do something
End If
Run Code Online (Sandbox Code Playgroud)


小智 5

试试这个:aRow.IsSomeFieldNull


Mar*_*ell 4

object不同之处在于,在相关问题中,它是通过索引器谈论非类型化值(即)。当你通过 via 时.SomeField,类型已经包含在内 - 所以这可能是等等。尝试anint是没有意义的,因为 an永远不可能。IsDBNullintintDBNull

本质上它SomeField是一个包装器(请原谅 C# 口音......)

public int SomeField {
    get { return (int) this["someFieldName"]; }
    set { this["someFieldName"] = value; }
}
Run Code Online (Sandbox Code Playgroud)

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