|
Программирование >> Программирование с использованием ajax
Установить связь 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
Category Ю CategoryName Oscrplion Ptcture ProductlD ProductName Categoryro QuanWyPefUn* UntPrice UrttslnStock UrttjOnOrder ReordefLevel Oscontnued
Reotan кедюпЮ RegKmOesalption Shippers V CompanyName Phone
OrderlD CustomerlD EmployeelD OrderOate RequredDate SUipedDate ShvMame ShcAddrefs Sh*)C<y Shc)Re<>on
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();
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |