在我们的应用程序中,我想不出很多我们关心空字符串字段的情况。我们只是希望它们在大多数情况下显示为空字符串。
因此,当使用内置的ADO.NET数据集/数据表时,错误:
在引用任何旧的字符串数据时,从类型DBNull转换为类型 字符串无效
在应用程序中稍后会很常见。
这是一个特别的问题,因为它可以很容易地把我们赶出去(而且通常在测试中看不到)
我知道有各种解决方案:
1。在所有情况下检查.IsXXXNull
但是:
这是一个繁琐的额外几行 整个应用程序的代码
如果我们忘了支票,即使是100分中的一次,我们也有 <潜在的潜在错误
2。在数据集设计器中,将字段的NullValue属性从默认的“Throw Exception”更改为“Empty”
可是:
我们必须识别和改变 每个表和每个字符串字段 我们添加到数据集设计器 (记住默认是“扔 异常“)
如果我们在100中忘记了一次更改,我们就有一个潜在的错误 潜伏
第3。避免在基础数据中存储Null
可是:
我们必须识别和改变 每个表和每个字符串字段 我们添加到数据库
我们并不总是那样 控制基础数据
4。不要使用数据集设计器,将数据拉入我们自己的类对象,在我们自己的代码中处理所有DBNull混乱
但是:
5。使用代码生成器或框架,如CSLA而不是DataSet
但是:
答案 0 :(得分:2)
这就是DataSet和DataTables的原因:
好,用于快速整理使用简单数据访问的应用程序(如您所述)。
不太好 - 有太多的简化和概括。
我发现使用正确的数据绑定感知对象模型几乎总是胜过使用DataSet和DataTables,并且他们可以拥有所有(以及更多!)功能,易用性和使用DataSet和DataTables的速度
并且您不会遇到类似这样的问题,因为您的业务模型与您的数据库结构没有紧密耦合。
我还没有遇到过使用像CSLA.NET这样的框架的人,想要回到DataSet和DataTables。
答案 1 :(得分:0)
<强> 5。 (或者可能是4b)
使用在数据访问类中为您提供NULL功能的框架。上述CSLA.NET框架(由Riko提供)使用SafeDataReader类,其工作方式与DataReader完全相同,但可以将所有NULL转换为数据访问和业务逻辑层的空值。