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

1 ... 303 304 305 [ 306 ] 307 308 309 ... 396


foreach (var customer in preferredCustomers)

Console.WriteLine( {0} заказов: {1} {2}, {3} {4} , customer.GetChildRows( CustOrders ).Length, customer[ CustomerlD ], customer[ CompanyName ], customer[ City ], customer[ Region ] );

6. Завершите метод Main () стандартной логикой закрытия, которая использовалась в прочих примерах:

thisConnection.Close ();

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

7. Откомпилируйте и запустите приложение. Вы должны увидеть следующий вывод:

Заказчики, у которых заказов > 10:

заказов:

LINOD

заказов:

REGGC

заказов:

SUPRD

заказов:

AROUT

заказов:

MEREP

заказов:

QUEEN

заказов:

ВОТТМ

заказов:

HANAR

заказов:

KOENE

заказов:

LAMAI

заказов:

LILAS

заказов:

WHITC

заказов:

FRANK

заказов:

LEHMS

заказов:

WARTH

заказов:

BONAP

заказов:

BERGS

заказов:

HILAA

заказов:

RATTC

заказов:

FOLKO

заказов:

HUNGO

заказов:

QUICK

заказов:

ERNSH

заказов:

SAVEA

Программа завершена, нажмите 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 );

Вы создаете объект DataAdapter для каждой таблицы, на которую ссылаетесь. Затем вы наполняете DataSet данными из столбцов, с которыми будете работать; в этом случае вы не заботитесь об эффективности, потому просто используете все дос-



тупные столбцы (SELECT * FROM <таблица>). Затем строится объект 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. Чтобы отобразить эти связанные строки, выполняется цикл foreach по каждой DataRow в коллекции:

namespace LINQtoDataSet {

class Program {

static void Main(string[] args) {

var customers = thisDataSet.Tables[ Customers ].AsEnumerable(); var orders = thisDataSet.Tables[ Orders ].AsEnumerable(); var preferredCustomers = from с in customers

where с.GetChildRows( CustOrders ).Length > 10 orderby c.GetChildRows( CustOrders ).Length select c;

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

Резюме

В главе рассматривались следующие основные темы.

□ ADO.NET- часть .NET Framework, которая позволяет обеспечить доступ к реляционным базам данных и другим источникам информации. Технология ADO.NET спроектирована так, чтобы предоставлять простой, гибкий каркас доступа к данным. Она ориентирована на многослойную архитектуру приложений и интегрирует реляционные данные с XML.

□ Классы ADO.NET содержатся в пространстве имен System. Data. Была рассмотрена объектная модель ADO.NET и роли, которые играют ее основные объекты, включая соединения, команды, DataReader, адаптер данных, DataSet, DataTable, DataRow и DataColumn.



□ Поставщики данных .NET, предоставляющие доступ к определенным источникам данных, и возможность расширения ADO.NET за счет написания поставщиков для новых источников. Вы ознакомились с такими поставщиками данных, как ADO.NET для Microsoft SQL Server и источники OLE DB, а также узнали о том, что они содержатся в пространствах имен System. Data. SqlClient и System. Data. OleDB соответственно.

□ Вы узнали, как реализуется быстрый доступ только для чтения к данным через объект DataReader, и как написать эквивалентную программу для поставщиков данных .NET - как SqlClient, так и OleDb. Вы научились обновлять данные и добавлять новые строки данных через объекты DataSet, адаптеры данных и объекты CommandBuilder. Вы также узнали, как находить строки с применением первичного ключа, а также удалять строки.

□ Доступ к множеству таблиц в DataSet через объект DataRelation для генерации XML-представления этих данных. И, наконец, вы кратко ознакомились с преимуществами поддержки языка SQL баз данных в ADO.NET, включая отображение сгенерированных команд SQL, прямое выполнение SQL и вызов хранимых процедур.

Как было показано, создание кода баз данных может оказаться достаточно сложной задачей, если приложение не относится к числу самых простых. В следующей главе мы рассмотрим инструменты Visual Studio 2008, которые создают большую часть сложного кода и значительно облегчают разработку приложений баз данных.

Упражнения

L Модифицируйте программу, приведенную в первом примере, чтобы она использовала таблицу Employees базы данных Northwind. Извлеките столбцы

EmployeelD и LastName.

2. Модифицируйте первую программу, демонстрирующую применение метода Update (), для изменения названия компании обратно в Bottom-Dollar Markets .

3. Напишите программу, запрашивающую у пользователя идентификатор заказчика.

4. Напишите программу для создания некоторых заказов для заказчика Zachary Zithers; используйте простые программы для просмотра заказов.

5. Напишите программу для отображения различных частей иерархических отношений в базе данных Northwind, использованных в настоящей главе, таких как

Products, Suppliers и Categories.

6. Запишите данные, сгенерированные в предыдущем упражнении, в виде документа XML.

7. Измените программу, выводящую детальную информацию о заказах и продуктах для всех заказчиков, чтобы она использовала конструкцию WHERE в операторе SELECT для таблицы Customers, тем самым ограничивая количество обрабатываемых заказчиков.

8. Модифицируйте программу, выводящую текст операторов UPDATE, INSERT и DELETE, чтобы она использовала в качестве SQL-команды SELECT * FROM Customers . Обратите внимание на сложность сгенерированных операторов.

9. Модифицируйте пример LINQoverDataSet для использования таблицы Employees базы данных Northwind, как в первом упражнении. Извлеките столбцы EmployeelD и LastName.



1 ... 303 304 305 [ 306 ] 307 308 309 ... 396

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