【问题标题】:Strongly typed dataset using variables for column names使用变量作为列名的强类型数据集
【发布时间】:2011-08-04 01:06:18
【问题描述】:

我目前正在通过索引引用通用数据集,并希望将其转换为表类型的强类型数据集。问题是我对 DataRow 的索引是一个变量。

目前我正在从数据库中提取 History_Column 值。

e.Dr[c.History_Column.ToString()] = Entry;

我想将 DataRow(示例中为“Dr”)定义为表的一种类型,以便可以执行类似以下操作:

e.Dr.COLUMN_NAME = Entry;

如何以这种方式使用动态变量?

谢谢!

【问题讨论】:

  • 您想要强类型,还是想要动态?两种完全不同的处理方式。
  • 我需要让它动态运行,但我遇到了 TableAdapter Update() 的问题。它告诉我,尽管已为列分配了新值,但该行已经存在。主键没有改变,所以我认为关键是改变会被识别并且数据库更新命令会执行?由于我的“动态”创建并且失去了 DataSet 的强类型特性,这是否不起作用?

标签: c# asp.net dataset strong-typing


【解决方案1】:

您可以使用动态类型来帮助您实现目标,但您的目标听起来有点矛盾。

dynamic Dr = new ExpandoObject();
Dr.whatever = 6;
Dr.anything = "asdf";

如果您将ExpandoObjectdynamic 一起使用,则可以分配任何属性。

【讨论】:

  • 也许问题应该是,然后,是否可以像我尝试做的那样使用动态索引,并且仍然能够做这样的事情 DataTable.Rows.Add(Dr) 然后表适配器。更新(数据表)?在这种情况下,我从强类型 DataSet 创建中创建了 DataTable 和 TableAdapter。
【解决方案2】:

强类型数据集是应用程序中派生自内置数据集类的类。您必须将它们添加到 Visual Studio 中的项目中。以下是creating strongly typed datasets 的一些说明。

但是,我建议您借此机会重构并完全摆脱数据集(如果可以的话)。 Entity Framework 为每一列提供强类型属性访问器、更好的“工作单元”模式、图形数据库映射工具,并且更易于使用。

【讨论】:

  • 谢谢。我想花时间重构我的应用程序,因为我意识到还有其他“更好”的选择,但我目前没有时间这样做,而且我的公司目前不支持。不过,我会牢记这一点,以备不时之需。感谢您抽出宝贵时间回复。
猜你喜欢
  • 1970-01-01
  • 2012-06-20
  • 1970-01-01
  • 1970-01-01
  • 2011-07-10
  • 1970-01-01
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
相关资源
最近更新 更多