DataSet中的Nullable Int列

goo*_*oon 7 .net int nullable strongly-typed-dataset

我正在使用.NET强类型数据集,并且有一个带有可空int列的表(以及一个可以为空的DateTime列).

显然,数据集设计器存在一个错误,它会阻止在这些数据类型上使用可为空的列.设计者只允许"抛出异常"作为空值的默认行为.遗憾的是,在数据库中使用可空数据类型时,空值是合法值,但在尝试从数据行检索此值时会导致抛出异常.

我已经看过几个关于这个问题的新闻组帖子,但还没有看到这个问题的任何体面的解决方法.

我很想知道别人如何处理这个问题.

谢谢.

Gab*_*elC 8

我认为ASP.NET论坛上的这篇文章将对这个问题提供一些帮助: 强类型DataSet/Nullable列问题

将此类属性设置为null的唯一方法是使用数据集生成器也创建的辅助方法.这些方法以列名命名,因此在您的情况下,您应该在数据行对象上使用名为IsApprovingUserNull()和SetApprovingUserNull()的方法.


Joh*_*ren 3

在 .NET 2.0 之前,DBNull 基本上是用来处理不可空值类型的。由于 ADO.NET 的设计,您无法避免 DBNull,除非您选择更直接的方法。DBNull 内置于 ADO.NET 的核心中,因此如果您想继续使用它,您必须学会接受它。

如果您提供自己的数据传输对象而不是依赖于通用 System.Data 命名空间,则可以检查(在使用数据读取器读取结果时)该值是否为 null,但您需要某种方法来生成强类型对象和映射,因为这确实是一项乏味的工作。

据我所知,DBNull 内置于 ADO.NET 的设计中,如果您使用它,构建应用程序的最佳方法是合并(规范化)DBNull 和 null。基本上,提供您自己的 DbConvert 类,该类拦截 DBNull 并在值为 DBNull 时返回实际的 null 引用。这是一个最低要求,但一旦完成,您就不用担心那么多 DBNull 值了。