Программирование >>  Программирование с использованием ajax 

1 ... 297 298 299 [ 300 ] 301 302 303 ... 396


Установить связь DataRelation между заказчиками и заказами DataRelation custOrderRel = thisDataSet.Relations.Add( CustOrders , thisDataSet.Tables[ Customers ].Columns[ CustomerlD ], thisDataSet.Tables[ Orders ].Columns[ CustomerlD ]);

Распечатать заказчиков и идентификаторы их заказов

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

Console.WriteLine( ID заказчика: + custRow[ CustomerlD ] +

Название: + custRow[ CompanyName ]); foreach (DataRow orderRow in custRow.GetChildRows(custOrderRel)) {

Console.WriteLine( ID заказа: + orderRow[ OrderlD ]);

thisConnection.Close();

Console.Write( Программа завершена, нажмите Enter для продолжения: ); Console.ReadLine() ;

4. Выполните приложение. Ниже показан фрагмент вывода:

ID заказа: 10696 ID заказа: 10723 ID заказа: 10740 ID заказа: 10861 ID заказа: 10904 ID заказа: 11032 ID заказа: 11066

ID заказчика: WILMK Название: Wilman Kala ID заказа: 10615 ID заказа: 10673 ID заказа: 10695 ID заказа: 10873 ID заказа: 10879 ID заказа: 10910 ID заказа: 11005

ID заказчика: WOLZA Название: Wolski Zajazd ID заказа: 10374 ID заказа: 10611 ID заказа: 10792 ID заказа: 10870 ID заказа: 10906 ID заказа: 10998 ID заказа: 11044

ID заказчика: ZACZI Название: Zachary Zithers Ltd. Программа завершена, нажмите Enter для продолжения:

Описание полученных результатов

Прежде чем сконструировать DataRelation, вы должны создать объект DataSet и связать таблицы базы данных, которые собираетесь использовать с ним, как показано ниже:

DataSet thisDataSet = new DataSet (); SqlDataAdapter custAdapter = new SqlDataAdapter(

SELECT * FROM Customers , thisConnection); SqlDataAdapter orderAdapter = new SqlDataAdapter(

SELECT * FROM Orders , thisConnection); custAdapter.Fill(thisDataSet, Customers ); orderAdapter.Fill(thisDataSet, Orders );



Для каждой таблицы, на которую 09тцествляется ссылка, создается объект DataAdapter. Затем DataSet заполняется данными из необходимых столбцов; в рассматриваемом случае беспокоиться об эффективности не нужно, поэтому просто берутся все доступные столбцы (SELECT * FROM <table>).

Затем создается объект DataRelation, который привязывается к DataSet:

DataRelation custOrderRel = thisDataSet.Relations.Add( CustOrders , thisDataSet.Tables[ Customers ].Columns[ CustomerlD ], thisDataSet.Tables[ Orders ].Columns[ CustomerlD ]);

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

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

Console.WriteLine( ID заказчика: + custRow[ CustomerlD ] + Название: + custRow[ CompanyName ]);

Здесь осуществляется просто проход циклом по коллекции Rows таблицы Customers, печатая CustomerlD и CompanyName для каждого заказчика. После отображения заказчика необходимо показать связанные с ним заказы.

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

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

Console.WriteLine( ID заказа: + orderRow[ OrderlD ]);

Этот процесс повторяется для каждого заказчика. При отображении OrderlD добавляется ведущий пробел, чтобы все заказы каждого заказчика отображались со сдвигом по отношению к информации о заказчике. Благодаря этому сдвигу можно наглядно видеть отношение родительский-дочерний между каждым заказчиком и его заказами. Заказчик Zachary Zithers Ltd. не имеет заказов, поскольку в предыдущем примере вы добавили только его, но не его заказы.

Это одно отношение между двумя таблицами, а теперь рассмотрим отношения между большим количеством таблиц, расширив программу, чтобы увидеть, какие специфические элементы каждый заказчик включил в каждый заказ и какие наименования продуктов. Эта информация доступна через другие таблицы базы данных Northwind. Давайте рассмотрим эти отношения, взглянув на диаграмму базы данных Northwind, показанную на рис. 28.5.

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

В следующем практическом занятии будут отображены подробности каждого заказа, включая имена продуктов, с помощью отношений между четырьмя таблицами, показанными на рис. 28.5: Customers, Orders, Order Details и Products.



SjppfcerlD Corrpanyfje

ContactName

CortactTtte

Ad*ess

Regwr

PostaKode

Ctxrtry

Ptwne

EfTi

EmpJoyeelD Terr<oryID

rrltofiw

TefftorylD TerrttoryOeKrvtion

КедЮпЮ

Category Ю CategoryName Oscrplion Ptcture

ProductlD ProductName

Categoryro

QuanWyPefUn*

UntPrice

UrttslnStock

UrttjOnOrder

ReordefLevel

Oscontnued

Employee

ErrotoyeelD

Le Name

FrstName

TileOfCourtesy

BrthOate

rtreOate

Adcess

Fiegcn Posta<ode

CoLrtry

Reotan

кедюпЮ RegKmOesalption

Shippers

V CompanyName Phone

Order Detiii

OderlD

ProductD

Un<Pnce

Quant y

Oscount

OrderlD

CustomerlD

EmployeelD

OrderOate

RequredDate

SUipedDate

ShvMame ShcAddrefs Sh*)C<y Shc)Re<>on

Customers

CustomerlD

CompanyName

ContactName

ContactTrte

Ad* s

PostalCode

Cotrvtry

Phone

CustomerOistomerOemo

? I CustomerlD flCurtomerTypelD

CurtomerTypelD CustomerOesc

Pur. 28. 5. Диаграмма базы данных Sorthwind

Пра1стическое занятие

Работа с множественными отношениями

Выполните следующие шаги для создания примера ManyRelations в Visual С# 2008.

L Создайте новое консольное приложение по имени ManyRelations в каталоге С:\BegVCSharp\Chapter28.

2. Добавьте директивы using для классов ADO.NET, которые вы будете использовать:

#region Using Directives using System; using System.Data; using System. Data. SqlClient;

using System.Collections.Generic;

using System.Text;

#endregion

Использовать пространство имен ADO.NET Использовать пространство имен поставщика данных SQL Server

3. Добавьте следующий код в метод Main ():

static void Main(string [ ] args) {

Указать специфичную для SQL Server строку соединения SqlConnection thisConnection = new SqlConnection( @ Data Source=.\SQLEXPRESS; +

(a AttachDbFilename=C:\SQL Server 2000 Sample Databases\ NORTHWND.MDF; + @ Integrated Security=True;Connect Timeout=30;User Instance=true ); DataSet thisDataSet = new DataSet();



1 ... 297 298 299 [ 300 ] 301 302 303 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика