Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 253

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 247 248 249 250 251 252 < 253 > 254 255 256 257 258 259 .. 404 >> Следующая


У объекта DataTable имеется свойство Relations, которое представляет собой семейство всех объектов DataRelation, описывающих отношения между таблицами, ВХОДЯЩИМИ В объект DataSet.

Для создания нового объекта DataRelation мы используем метод Add<) семейства Relations, которому передается строка, представляющая собой название отношения (в данном примере — 'Custorders'), а также два объекта DataColumn: сначала родительский столбец CustomeriD в таблице customers, а затем дочерний столбец CustomeriD в таблице orders. Родительский столбец должен всегда предшествовать дочернему.

Использование метода GetChildRows

Теперь мы готовы к поиску клиентов и их заказов. Сначала следует организовать цикл foreach для вывода информации о каждом клиенте:

foreach (DataRow custRow in thisDataSet.Tables['Customers'].Rows)

(

Console .WriteLine Customer ID: * + custRowt 'CustomeriD' 1 +

' Name; ' + custRow['CompanyName'])/

Мы просто проходим в цикле по всему семейству rows таблицы customers и выводим значения CustomeriD и companyHame для каждого клиента. После того как выведена информация о конкретном клненте, требуется вывести информацию

о заказах, относящихся к данному клиенту.

Для этого мы используем вложенный цикл foreach, при инициализации которого вызывается метод GetChildRowsО объекта DataRow. Мы передаем названному методу созданный нами объект DataRelation, а метод GetChildRows () возвращает нам объект DataRowCoiiection, в котором содержатся только те строки в таблице Orders, которые привязаны к данному клиенту:

foreach (DataRow orderRow in custRow.GetChildRows(custOrderRel))

(

Console.WriteLine(* Order ID: ' + orderRow['OrderID'])j

>

>

Теперь эта процедура будет повторяться для каждого клиента. Мы предваряем вывод значения OrderiD несколькими пробелами, в результате чего заказы каждого клиента выводятся с определенным отступом после информации о самом клиенте:

Customer ID: WILMK Name: Wilman Kala Order ID: 10615 Order ID: 10673
544

Глава 19

Customer ID: WOLZA Name: Wolski Zajazd Order ID: 10374 Order ID: 10611 . Order ID: 10792

Customer ID: ZACZI Name: Zachary Zithers Ltd.

При таком выводе с отступами отношения родители-дети для каждого клиента и его заказов видны более четко. У клиента с идентификатором “Zachary Zithers Ltd.” заказы отсутствуют, поскольку мы включили его в базу данных в одном из предыдущих примеров.

(*и*?впяжя._ A


Практикум: работа с большим количеством таблиц

Расширим нашу программу, чтобы получить информацию

о наименованиях, заказываемых каждым клиентом, и названиях продукции. Эта информация хранится в других таблицах базы данных Northwind. Для НЗГЛЯД-ности отношений между таблицами создадим диаграмму базы данных для БД Northwind в VS, где будут содержаться все таблицы,— так, как это проиллюстрировано на рисунке слева. Если вы используете MSDE и отношения не были импортированы, то тогда все нормально —

• , просто обратитесь к изображен-

ной здесь диаграмме. Линии, проведенные между таблицами, обозначают отношения, при этом оба конца линии ведут к столбцу, обозначающему отношение. Отношение первичный ключ — внешний ключ изображено с помощью символа ключа у родительского столбца и значка бесконечности у дочернего столица.

Мы собираемся выводить подробную ниформацию о каждом заказе клиента (включая наименования продукции), следуя отношениям, установленным между четырьмя таблицами, расположенными в самом верху диаграммы: customers, Orders, Order Details и Products. В программе сначала инициализируется соединение, а затем создаются объекты DataAdapter для каждой нз четырех таблиц:

DataSet thisDataSet = new DataSet();

SqlDataAdapter custAdapter - ген SqlDataAdapter(

¦SELECT * FROM Customers', thisConnection)> custAdapter.Fill(thisDataSet, 'Customers');

SqlDataAdapter orderAdapter = new SqlDataAdapter(

¦SELECT * FROM Orders', thisConnection); orderAdapter.Fill(thisDataSet, 'Orders')i

SqlDataAdapter detail Adapter ¦* new SqlDataAdapter (

'SELECT * FROM Order Details', thisConnection); detailAdapter.Fill(thiaDataSet, 'Order Detail*');

SqlDataAdapter prodAdapter » new SqlDataAdapter (

¦SELECT * FROM Products', thisConnection)i prodAdapter. Fill I thisDataSet, 'Products^ ;
Доступ к данным посредством ADO.NET ______________________ _________________545

Далее требуется построить объекты DataRelation дня каждого отношения между четырьмя таблицами:

DataRelation custOrderRel = thisDataSet.Relations.Add('CustOrders', thisDataSet.Tables Г'Customers'1.Columns('CustomeriD*!, thisDataSet.Tables['Orders'].Columns('CustomeriD'])i

DataRelation orderDetailRel - thisDataSet.Relations.Add("OrderDetail', thisDataSet,Tablest'Orders'].Columns['OrderiD'), thisDataSet.Tables['Order Details'].Columns?'OrderID*]);

Первое отношение в точности совпадает с отношением из предшествующего примера. Второе отношение — отношение между таблицами Orders и OrderDetails, причем в качестве связующего столбца используется столбец OrderiD.
Предыдущая << 1 .. 247 248 249 250 251 252 < 253 > 254 255 256 257 258 259 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.