【问题标题】:Typed DataSet in .NET Framework.NET Framework 中的类型化数据集
【发布时间】:2013-10-12 21:42:03
【问题描述】:

我需要从数据库表中自动获取DataSet,我使用了内部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 列。当我需要获得一个通用的Referente 如果是NULL 时,return 不会发生,因为会引发异常。 我解决了将 return 语句替换为:

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

由于该表包含数百列,因此我将采用一种自动处理此过程的方法(即,如果发生IS NULL,我将使用不会引发异常的访问器方法生成一个DataSet)。

【问题讨论】:

  • 首先,编辑生成的代码是个坏主意,除非您永远不想刷新该文件以反映更改。其次,为什么DataSets?特别是,为什么键入 DataSets?这是一种非常可怕的方法,IMO。我通常不建议 DataSet 除非有充分的理由,但 typed DataSets 充满 痛苦。 IMO,一个简单的 POCO / DTO 在这里会是一个更好的选择(尽管有问题的标题,键入 DataSet 离成为 DTO 还很远)。
  • 我使用了dataSet,因为它很容易被框架生成。我很乐意用尽可能少的设置替换一些更简单的东西。
  • 如果您追求“由框架轻松生成” - 我建议您查看 LINQ-to-SQL 或实体框架。

标签: .net strongly-typed-dataset


【解决方案1】:

在数据集设计器中,选择 (Empty) 而不是 NullValue 中的 (Throw Exception) 场地。

如果你在代码中访问数据集,你需要在数据行上使用 IsxxxNull 方法:在这段代码中,r 是数据行,_DateOpened 是 Nullable (of Date)

  If r.IsDateOpenedNull Then
        _DateOpened = Nothing
    Else
        _DateOpened = r.DateOpened
    End If

【讨论】:

  • 谢谢。我很感激!
  • DataType 为 System.Int32 而不是 System.String 时如何解决此问题?
  • 如何处理这取决于您访问数据集的方式。只要您输入对数据类型有效的内容,您就可以在 NullValue 设置中输入内容。例如,对于 int,您可以输入零。或者,如果您在代码中访问数据集,则需要查看在数据行上生成的 IsxxxNull 和 SetxxxNull 方法。
  • 我已经考虑过选择 0 值的可能性,但这会触发一些约束。唉,我在那个领域需要的是NULL。我可以直接修改代码(我已经这样做了),但在下一次数据集编辑时,我的修改将丢失......
猜你喜欢
  • 1970-01-01
  • 2011-07-24
  • 2011-05-27
  • 2010-09-29
  • 1970-01-01
  • 2011-11-15
  • 2011-01-08
  • 2011-05-28
  • 2010-10-30
相关资源
最近更新 更多