Nullable Int列数据集
-
22-08-2019 - |
题
我的工作。净强类型的数据集,并有一个表格有一个可空int列(和一个可空DateTime列)。
显然有一个错误的数据集的设计师,以防止具有nullable列这些数据的类型。这设计只允许"扔例外情况"作为默认行为,用于空值。不幸的是,当使用一个可空的数据类型的数据库,一个空值是合法的价值,但结果引发的例外时,试图获取这些价值从一个数据排。
我已经看到了几个新闻组张贴有关这个问题,但还没有看到任何体面的解决办法这一问题。
我很想听听其他人如何处理这个问题。
谢谢。
解决方案
DBNull基本上是来玩处理不可空值的类型。网2.0.由于设计的ADO.NET有没有办法可以避免DBNull,除非你选择了一个更直接的方法。DBNull是建立在核心的ADO.NET所以你就必须学习生活,如果你想继续使用它。
如果你提供自己的数据输送对象,而不是依靠通用系统。数据的名字空间,可以检查(同时读的结果与一个数据阅读器),如果是空值,但你会需要某种方式产生强烈的类型对象和映射,因为这是真的繁琐的工作。
尽我所知,DBNull是在建的设计ADO.NET 和最好的方式来建立您的应用程序,如果您使用的是,是凝聚(规范)DBNull和空。基本上,提供自己的DbConvert类拦截DBNull和返回的一个实际空参考,如果价值是DBNull.这是一个最低要求,但尽快这样做了你会有较少的DBNull值浮动担心。
其他提示
我觉得这个职位上ASP.NET论坛将是问题的一些帮助: 强类型的数据集/空的列问题
的唯一方法来设置这样的性质,以 空是使用helper方法 该数据集生成器也创建。 该方法被命名后您的 列名,所以你的情况,你 应该对数据行的方法 对象调用IsApprovingUserNull() 和SetApprovingUserNull()。
这已经有一段时间,因为我用类型数据集,但我在使用codegen:nullValue
属性的旧代码见。我不认为这是由设计师的支持,至少在VS2005(我该项目所用),所以你必须打开你的XSD文件的XML编辑器,并用手做。
生成的XML将看起来像这样:
<xs:sequence>
<xs:element
name="MyIntColumn"
codegen:nullValue="0"
type="xs:int"
minOccurs="0" />
<xs:element
name="MyBoolColumn"
codegen:nullValue="false"
type="xs:boolean"
minOccurs="0" />
<xs:element
name="MyDateColumn"
codegen:nullValue="1900-01-01"
type="xs:dateTime"
minOccurs="0" />
</xs:sequence>