Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 266

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 260 261 262 263 264 265 < 266 > 267 268 269 270 271 272 .. 320 >> Следующая

іІЬ.м .и--, : Database ibiijrми (Cars)

3? — — OrderlD CarlD ClBtID

;
Customers
I_[ FirstName I LastName Ї 9 CustID
! -|ol *l
4
Inventory
Carlo Mate Color PetName
jj4
Рис. 13.19. Структура базы данных Automobile
658 Глава 13 • Доступ к данным при помощи ADO.NET
Таблица Inventory является родительской таблицей для таблицы Orders, и для первичного ключа (столбца CarlD) в таблице Inventory предусмотрен внешний ключ в таблице Orders. Таблица Customers также является родительской для таблицы Orders, и эти таблицы связаны отношением первичный/внешний ключ по столбцу CustID. Как мы увидим чуть позже, добавление в DataSet объектов DataRel ation, моделирующих эти отношения, позволит нам получать взаимосвязанные данные для таблиц.
Создание объекта DataSet мы начнем с объявления переменных, представляющих таблицы и сам объект DataSet. Выглядеть это будет так:
public class inaiiif-'orm: System.Windows Forms Form I
II Таблица Inventory
private DataTable inventor/Table - new DataTableC'Inventory"): Il Таблица Customers
private DataTable customersTable - new DataTablet"Customers"): // Таблица Orders
private DataTable ordersTable - new DataTableC"Orders");
II Наш DataSet
private DataSet carsDataSet - new DataSetOCarOataSet");
Г
Теперь мы создадим (чтобы удобнее было все показывать) два очень простых класса - Саг и Customer, для хранения информации о которых, в сущности, и будет использован наш объект DataSet. Обратите внимание, что в классе Customer предусмотрена специальная переменная для хранения информации об автомобиле, в покупке которого заинтересован этот покупатель:
public class Car {
Il Переменные ны объявляем как public исключительно для упрощения доступа
// к НИН
public string petName. make, color;
public Car (string petName. string make, string Color)
{
this.petName - petName; this,color - color; this.make - make:
}
j
public class Customer I
public Customer (string fName. string !Name, int currentOrder) {
this.firstName - fName; this.lastName - IName: • this.currCarOrder - currentOrder;
5
public string firstName. lastNarne: public int currCarOrder;
)
Возможности класса 659
На главной форме у нас также будут использованы два массива (объекты ArrayLi st) для хранения информации об автомобилях и заказчиках. Будем считать, что эти два массива будут заполняться данными в конструкторе для формы. Кроме того, в конструкторе будет производиться вызов нескольких вспомогательных функций для создания таблиц и отношений между ними. И еще одну операцию мы будем производить в конструкторе: привязывать объекты DataTable для таблиц Inventory и Customer к соответствующим элементам управления DataGrid. Подобная привязка через объект DataSet производится при помощи метода SetData?i ndi ng() с параметрами:
// Списки автонобилей и заказчиков
private ArrayList arTheCars, arTheCustomers:
public ppemrormo {
II Заполняем массив автонобилей соответствующими объектами
arTheCars = newArrayLlstO:
arTheCars. Add (new Ca г ("Списку". "BMW". "Green")):
//Производим ту же операций с массивом заказчиков
arTheCustomers - newArrayti stO:
arTheCustomers. AddCnew Customed "Dave". "Brenner". 1020});
//Создаем объекты DataTable обычным способом, расснотрепным в предыдущих
// разделах)
MakeInventoryTable():
MakeCustomerTableO:
MakeOrderTableO:
// Создаем объект DataRelation (об этом чуть позже)
BuildTableRelationshipO;
//Привязываем две табшщи к элементам управления DataGrid параметр -
// DataSet. второй - таблица в DataSet)
CarDataGnd.SetDataB1nding(carsDataSet. "Inventory"): CustomerDataGnd.SetDataBindingtcarsDataSet. "Customers"):
}
Все объекты будут создаваться точно так как это производилось
в предыдущих разделах этой главы. Чтобы проще было сосредоточиться на лоти ке DataSet, мы опустим основную часть кода для создания таблиц. Однако отметим,
что в каждой таблице у нас предусмотрен столбец счетчика, который является
первичным ключом таблицы. Наиболее важная часть кода по созданию объектов DataTabl e представлена ниже:
private void MakeOrderTableO
{
II Добавляем таблицу в DataSet
са Г5.DataSet.tables.Add(customerstablе);
Создаем столбцы Order (I). CustID и а затем !юШгкг их в таблицу
// Назначаем столбец CoH г. первичным ключом
660 Глава 13 • Доступ к данным при помощи
// Добавляет несколько заказов
fordnt 1 - 0; і < arTheCustomers.Cojnt: і++)
(
DataRow newRow;
newRow = ordersTabl e.NewRowC);
Customer с = (Customer)arTheCustomers[i];
newRow["CustID"] • i;
newRow["CarIO"] = c.currCarOrder:
carsDataSet.Tables["Orders"].Rows.Add(newRow);
}
]
Вспомогательные функции MakelmentoryTabl 8(] и «.akeCstcmerTabl e( 5 в нашем случае будут создаваться точно по таким же принципам.
Моделируем отношения между таблицами при помощи класса DataRelation
Самая интересная из всего набора вспомогательных функций в конструкторе формы - это, безусловно, функция Bui IdTaMeReI ationShip(), которая ответственна за создание отношений между таблицами OataSet. После того как в DataSet появилось несколько объектов таблиц, мы можем программным образом определить отношения между этими таблицами. Конечно, создание таких отношений не является обязательным, но во многих случаях это предоставляет нам важные дополнительные возможности. Например, мы сможем переходить между строками разных таблиц «на лету» и осуществлять запросы сразу к нескольким таблицам.
Предыдущая << 1 .. 260 261 262 263 264 265 < 266 > 267 268 269 270 271 272 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100