Использование наборов данных. Множественные таблицы в объекте DataSet (Набор данных).
На рис. 9.5 представлена иерархия объектов, содержащихся в DataSet (Набор данных). Прежде, чем приступить к материалу, излагаемому ниже, полезно ознакомиться с этой диаграммой.
Рис. 9.5. Иерархия класса DataSet (Набор данных)
Множественные таблицы в объекте DataSet (Набор данных)
Каждый объект DataSet (Набор данных) содержит коллекцию из одного или более объектов, DataTable (Таблица данных). Каждый объект DataTable (Таблица данных) соответствует одной таблице. С помощью свойства SelectCommand, в котором содержится операция соединения, можно производить выборку из нескольких таблиц базы данных в один объект DataTable (Таблица данных).
При необходимости обновить содержимое множественных таблиц достаточно определить лишь команду обновления, так как информация о связях между таблицами базы данных уже известна. В файле Hotel-Bookings.h нашего примера свойство SelectCommand объекта SqlDataAdapter, содержащегося в объекте HotelBroker (Посредник, бронирующий места в гостинице), определено следующим образом:
String *cmd = // Строка "select Customerld, HotelName, City, ArrivalDate, // выбрать DepartureDate, Reservationld from Reservations, Hotels where Reservations.Hotelld = Hotels.Hotelld"; // где Резервирование.Hotelld = Гостиницы.Hotelld"; adapter › SelectCommand = new SqlCommand(cmd, conn); dataset = new DataSet; // новый Набор данных adapter › Fill(dataset, "Reservations"); // Заполнить (набор данных, "Резервирование")
В этом случае DataSet (Набор данных) содержит один объект DataTable (Таблица данных), представляющий таблицу, называющуюся Reservations (Резервирование). Информация о том, что некоторые данные получены из таблицы Hotels, не сохраняется.
В один набор данных можно загрузить данные нескольких таблиц. Это продемонстрировано в примере DataSchema, в котором используется база данных Northwind.
adapter › SelectCommand = new SqlCommand( "select * from [Order Details] where Productld = 1", // "выбрать * из [Подробности заказа] где Productld = 1 ", conn); adapter › FillSchema ( dataset, SchemaType::Source, "Order Details"); // набор данных, SchemaType:: Источник, " Подробности заказа"); adapter › Fill(dataset, "Order Details"); // Заполнить (набор данных, " Подробности заказа"); adapter › SelectCommand = new SqlCommand("select * from Shippers", conn); // выбрать * из Грузоотправителей adapter › FillSchema( dataset, SchemaType::Source, "Shippers"); // набор данных, SchemaType:: Источник, "Грузоотправители"); adapter › Fill(dataset, "Shippers"); // Заполнить (набор данных, "Грузоотправители");
В этом случае объект DataSet (Набор данных) содержит две таблицы, OrderDetails и Shippers.