Заполнение связанных наборов данных из адаптера таблицы - PullRequest
1 голос
/ 04 августа 2010

Я использую настольные адаптеры и наборы данных в .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

Это все отлично работает. Но теперь я также хочу данные из таблицы 2. Я заметил, что в строке генерируется поле Table2Row, которое кажется идеальным, но оно установлено в нуль. Как правильно заполнить этот набор данных?

Ответы [ 2 ]

1 голос
/ 04 августа 2010

Каждый DataTable в наборе типизированных данных имеет свой собственный TableAdapter.Таким образом, вам придется выполнить один и тот же шаг для каждой DataTable в наборе данных.

Не существует API, который позволял бы выполнять автоматическое заполнение всего набора типизированных данных, или такой код не генерируется внутри типизированного-данный набор данных, который поддерживает это.Это также трудно сделать, потому что у TableAdapters нет общего базового класса, который может позволить вам это сделать.

Если вам действительно нужно это сделать, вам придется поддерживать коллекцию типа DataTable.names и имена типов TableAdapter и выполняют итерацию по коллекции, чтобы выполнить заполнение набора данных.

Поэтому я рекомендую заполнять набор данных для каждой таблицы в «жестком коде».

0 голосов
/ 10 мая 2013

На самом деле существует поставщик данных Microsoft под названием MSDataShape, который предоставляет эту функцию. Он был помечен для амортизации в последний раз, когда я проверял, и я не знаю, каков текущий статус и планы на будущее, или что его заменяет.

Вот пример одной «команды SQL», которая, как я полагаю, вернет DataSet с двумя прекрасно связанными DataTable -s:

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

Потенциальная замена, на которую стоит обратить внимание, - это тщательно продуманный запрос FOR XML, но я не играл с этим.

EDIT: Я думаю этот SO-ответ делает именно это, используя XML.

...