从表适配器填充相关数据集

时间:2010-08-04 09:15:25

标签: c# strongly-typed-dataset

我在.NET(版本2.0)中使用表适配器和数据集。

我有两张这样的表:

Table1
------
...
TypeId

Table2
------
Id
Name

其中Table1.TypeId链接到Table2.Id。

我通过使用向导强烈生成了这些类型,所以现在我可以这样做:

Table1Adapter adapter = new Table1Adapter();
Table1DataSet data = adapter.GetData();

foreach(Table1Row row in data) { ... }
// Can now iterate through and display the data

一切正常。但现在我也想要Table2中的数据。我注意到在行中生成的字段Table2Row看起来很理想,但它被设置为null。如何正确填充此数据集?

2 个答案:

答案 0 :(得分:1)

Typed-Dataset中的每个DataTable都有自己的TableAdapter。因此,对于数据集中的每个DataTable,您必须执行相同的步骤。

不存在任何api允许您对整个类型化数据集执行此自动填充,或者在支持此类型的数据集数据集中不生成此类代码。这样做也很困难,因为TableAdapter没有可以让你这样做的公共基类。

如果确实需要这样做,则必须维护DataTable类型名称和TableAdapter类型名称的集合,并迭代集合以执行数据集填充。

所以我建议以“硬编码”方式填充每个表的数据集。

答案 1 :(得分:0)

实际上有一个名为“MSDataShape”的Microsoft数据提供程序,它提供此功能。当我检查并且我不知道当前状态和未来计划是什么,或者什么取代它时,它被标记为折旧。

这是一个单独的“SQL命令”的示例,我相信它会返回DataSet,其中包含两个非常相关的DataTable - s:

   SHAPE  {select * from customers}
   APPEND ({select * from orders} AS rsOrders
           RELATE customerid TO customerid)

对于XML查询来说,可能需要更换的内容是精心设计的,但我还没有使用它。

修改 我认为this SO answer完全使用XML。