Коллекции объектов DataSet (Набор данных)
При помещении данных в объект DataSet (Набор данных) считываются также и связанные с этими данными таблицы и столбцы. Каждый набор данных имеет коллекции, представляющие все таблицы, столбцы и строки, связанные с данными, содержащимися в этом наборе.
Класс HotelBroker (Посредник, бронирующий места в гостинице) из используемого нами в качестве примера приложения содержит метод ListHotelsToFile, в котором продемонстрировано, как получить такую информацию и записать ее в файл Hotels.txt. Этот метод вызывается при нажатии кнопки на форме, описанной в файле MainAdmin-Form.cs. Вывод данных осуществляется перенаправлением вывода на консоль. HotelDAtaset – набор данных, содержащий данные из базы данных HotelBroker (Посредник, бронирующий места в гостинице). Приведем фрагмент файла HotelBroker.h.
TextWriter *tw = new StreamWriter("Hotels.txt"); Console::SetOut(tw); // печатающее устройство – // переадресовать вывод try { Console::WriteLine("Hotels"); // Гостиницы DataTable *t = hotelsDataset › Tables › get_Item(// Таблицы "Hotels"); // Гостиницы if (t == 0) // если (t == 0) return; lEnumerator *pEnum = t › Columns › GetEnumerator(); // Столбцы while (pEnum › MoveNext()) { DataColumn *c = dynamic_cast<DataColumn *>(pEnum › Current); Console::Write("{0, -20}", c › ColumnName); } Console::WriteLine(""); pEnum = t › Rows › GetEnumerator(); while (pEnum › MoveNext()) { DataRow *r = dynamic_cast<DataRow *> (pEnum › Current); for (int i=0; i<t › Colunms › Count; i++) // Столбцы › Счет { Type *type = r › get_Item(i) › GetType(); if (type › FullName › Equals("System::Int32")) // если равняется ("Система:: Int32")) Console::Write("{0, -20}", r › get_Item(i)); else { String *s = r › get_Item(i) › ToString(); // Строка s = s › Trim(); // Вырезка Console::Write("{0, -20}", s); } } Console::WriteLine(""); } Console::WriteLine(""); } catch(Exception *e) // Исключение { throw e; } _finally // наконец { tw › Close (); }
Коллекция Tables (Таблицы) – это коллекция всех экземпляров DataTable (Таблица данных), содержащихся в объекте DataSet (Набор данных). В нашем примере такой экземпляр один, так что нет необходимости перемещаться по коллекции. Поэтому программа просто проходит по столбцам таблицы, воспринимая их содержимое как заголовки для данных, которые будут распечатаны далее. После считывания заголовков просматривается содержимое каждой строки таблицы.
Для каждого из значений в строке программа выясняет тип значения и печатает его в соответствующем формате. В нашем случае программа проверяет, какой тип имеет рассматриваемое поле базы данных Hotel (Гостиница). Проверка типа значения поля, а не просто вывод на печать как Object (Объект), позволяет вывести данные в соответствующем формате.
Как мы увидим позже, заполнять набор данных можно с помощью этих коллекций, без получения данных от их источника. Для этого просто следует добавить таблицы, столбцы или строки в соответствующие коллекции.