我的工作。净强类型的数据集,并有一个表格有一个可空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>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top