.net NET框架中的类型化数据集

.net NET框架中的类型化数据集,.net,strongly-typed-dataset,.net,Strongly Typed Dataset,我需要从DB表中自动获取数据集,我使用了内部Visual Studio工具,在创建的数百万行之间,这是访问器方法之一: [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]

我需要从DB表中自动获取数据集,我使用了内部Visual Studio工具,在创建的数百万行之间,这是访问器方法之一:

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
        public string Referente {
            get {
                try {
                    return ((string)(this[this.tableCATALOGO_Cliente.ReferenteColumn]));
                }
                catch (global::System.InvalidCastException e) {
                    throw new global::System.Data.StrongTypingException("The value for column \'Referente\' in table \'CATALOGO_Cliente\' is DBNull.", e);
                }
            }
            set {
                this[this.tableCATALOGO_Cliente.ReferenteColumn] = value;
            }
        }
如您所见,此代码引用了
Referente
列。当我需要获取泛型
引用时
如果为
NULL
返回
无法发生,因为异常被抛出。 我解决了将返回声明替换为以下内容的问题:

return this[this.tableCATALOGO_Cliente.ReferenteColumn] as string;

由于该表包含数百列,我想找到一种自动执行此过程的方法(即,我将使用访问器方法生成一个
数据集
,如果
为NULL,则不会引发异常发生)。

在数据集设计器中,选择
(空)
,而不是
(引发异常)
空值中
领域

如果在代码中访问数据集,则需要对数据行使用IsxxxNull方法:在该代码中,r是数据行,_DateOpened是可空的(of Date)


首先,编辑生成的代码是一个坏主意,除非您永远不想刷新该文件以反映更改。其次,为什么
DataSet
s?特别是,为什么要键入
DataSet
s?这是一个非常可怕的方法,我通常不会建议
DataSet
,除非有充分的理由,但是键入
DataSet
s充满了痛苦。在我看来,一个普通的POCO/DTO在这里是一个更好的选择(尽管有问题的标题,一个类型化的
数据集
离DTO还有很长的路要走)。我很乐意用更简单、设置更少的东西来代替它。如果您想要的是“由框架轻松生成”-我建议您看看LINQ到SQL或实体框架。谢谢。我很感激!当数据类型是System.Int32而不是System.String时,如何解决此问题?如何处理此问题取决于访问数据集的方式。只要输入对数据类型有效的内容,就可以在NullValue设置中键入内容。例如,对于int,可以输入零。或者,如果您在代码中访问数据集,则需要查看在datarow上生成的IsxxxNull和SetxxxNull方法。我已经考虑过选择0值的可能性,但这将触发一些约束。唉,我在那个领域需要的是空的。我可以直接修改代码(我已经这样做了),但在下一次编辑数据集时,我的修改将丢失。。。
  If r.IsDateOpenedNull Then
        _DateOpened = Nothing
    Else
        _DateOpened = r.DateOpened
    End If