* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна! RSS



Объект DataRelation
8 февраля 2009

Объект DataRelation представляет связь между двумя полями разных таблиц. Пред-
положим, в каждой из двух таблиц — Customers и Orders — содержится поле CustomerlD.
В таблице Customers любой покупатель встречается только один раз, а в таб-
лице Orders он может встречаться несколько раз. Сопоставив значения полей
CustomerlD в таблицах Orders и Customers, удается определить покупателя, размес-
тившего заказ. Поле CustomerlD в таблице Orders напрямую ссылается на строку со
сведениями о покупателе в таблице Customers и может служить ключом для извле-
чения этой строки; аналогичное поле таблицы Customers предназначено для извле-
чения любых строк из таблицы Orders.
Это типичный пример связи типа «один ко
многим», когда идентификатор, уникальный в одной таблице, соответствует не-
скольким строкам в другой таблице. Такой тип связи встречается чаще всего.
Объект DataRelation позволяет создать подобную связь между двумя таблицами
объекта DataSet. Объекты DataRelation, представляющие связи между таблицами
объекта DataSet, хранятся в его свойстве Relations. При создании объекта DataRelation
необходимо указать его имя, а также имена родительского и дочернего полей. В
случае типизированного объекта DataSety этих полей должен быть одинаковый тип.
Вот пример создания объекта DataRelation:
Visual Basic .NET
Dim myRelation As New
DataRelation("Data Relation 1", columnl. column2)
Visual C#
OataRelation myRelation -
new DataRelation("Data Relation 1", columnl,
colurnn2);
Чтобы активизировать созданный объект DataRelation, следует добавить его к
набору Relations объекта DataSet:
Visual Basic .NET
myDataSet.Relations.Add(myRelation)
Visual C#
myDataSet.Relations.Add(myRelation);
>• Создание нового объекта DataRelation
\. Объявите и создайте новый экземпляр класса DataRelation, ссылающийся на ро-
дительское и дочернее поля. Эти поля должны находиться в таблицах, располо-
женных в одном и том же объекте DataSet. При использовании типизированного
объекта DataSet поля также должны быть одинакового типа.
2. Добавьте созданный объект DataRelation к набору Relations объекта DataSet.
Извлечение связанных записей
Объект DataRelation позволяет извлечь строки, содержащие родительские и дочер-
ние поля. Для этого нужно вызвать методы GetChildRows или GetParentRow объекта
DataRow, которые требуют передать им действительный объект DataRelation. Метод
GetChildRow возвращает массив дочерних строк, заданных объектом DataRelation.
Метод GetParentRow отличается от него лишь тем, что возвращает только одну стро-
ку — родительскую, также заданную объектом DataRelation. Вызов этих методов
иллюстрируется следующим примером, который предполагает наличие таблиц
Customers и Orders, связанных посредством объекта DataRelation с именем Customers-
Orders; обе таблицы располагаются в объекте DataSet с именем myDataSet.
Visual Basic .NET
Dim ChildRowsf) As DataRow
Dim ParentRow As DataRow
1 Вернуть все дочерние строки первой строки таблицы Customers,
1 заданные объектом DataRelation с именем CustornersOrders,
ChildRows = _
myDataSet. Tables( "Customers" }.Rows{1). GetChildRows (CustornersOrders)
1 Вернуть дочернюю строку пятой строки таблицы Orders,
' заданную объектом DataRelation с именем CustomersOrders.
ParentRow =
myDataSet.Tables("Orders").Rows(5).GetParentRow(CustomersOrders)
Visual C#
DataRow[] ChildRows;
DataRow ParentRow;
// Вернуть все дочерние строки первой строки таблицы Customers,
// заданные объектом DataRelation с именем CustomersOrders.
ChildRows =
myDataSet.Tables["Customers"].Rows[1].GetChildRows(CustomersOrders);
// Вернуть дочернюю строку пятой строки таблицы Orders,
// заданную объектом DataRelation с именем CustomersOrders.
ParentRow =
myDataSet.Tablesf"Orders"].Rows[5].GetParentRow(CustomsrsOrders);
Ограничения
Объекты DataRelation тесно связаны с ограничениями — они определяют правила
вставки строк в DataTable и управления содержимым этих объектов. Ограничения
бывают двух типов — UniqueConstraint и ForeignKeyConstraint.
Ограничение UniqueConstraint запрещает добавлять в таблицу дублирующиеся
элементы, обычно с этим ограничением определяют первичный ключ таблицы.
ForeignKeyConstraint определяет правила обновления дочерних строк при измене-
нии родительской строки.
В общем случае ограничение создают так: сначала генерируют экземпляр объек-
та, представляющего ограничение соответствующего типа, и добавляют созданный
объект к набору Constraints таблицы, на поле которого налагается ограничение.
Ограничение действует, только если значение свойства Enforce Constraints объек-
та DataSet установлено в true.
Ограничения Unique
Создать ограничение UniqueConstraint несложно. Проще всего это сделать, устано-
вив свойство Unique объекта DataColumn в True (true), например:
Visual Basic .NET
myDataColurnn. Unique = True
Visual C#
myDataColumn.Unique = true;
В результате неявно создается ограничение UniqueConstraint, которое и добавля-
ется к набору Constraints. Это ограничение можно создать и явно: достаточно ука-
зать поле (столбец), в котором должны быть только уникальные значения. Создан-
ное таким образом ограничение затем придется вручную добавлять к набору Constraints:
Visual Basic .NET
Dim myConstraint As New UniqueConstraint(myDataRow)
myDataTable. Const r£ints.Add(rnyConstraint)
Visual C#
UniqueConstraint myConstraint - new UniqueConstraint(myDataRow);
myDataTable. Const raints. Add(rnyConstraint);
Ограничения Unique позволяют также определить составной ключ. Предполо-
жим, имеется таблица Employees со столбцами FirstName и LastName; в первом из
них могут быть дублирующиеся элементы, а во втором — нет, но комбинации зна-
чений этих столбцов должны быть уникальными. В этой ситуации ограничение
UniqueConstraint позволяет задать массив столбцов, комбинации значений которых
будут уникальными, например:
Visual Basic .NET
Dim myColumns(l) As DataColumn
myColuinns(O) - EmployeesTable.Columns("FirstName")
myColurans(l) = EmployeesTable.Columns("LastName")
Dim up/Constraint As New UniqueConstraint(myColumns)
EmployeesTable.Constraints.Add(myConstraint)
Visual C#
DataColumn[] myColumns = new DataColumn[2];
myColumns[0] = EmployeesTable.Columns["FirstName"];
myColumns[1] = EmployeesTable.Columns["LastName"];
UniqueConstraint rnyConstraint = new UniqueConstraint(myColumns);
EmployeesTable.Constraints.Add{myConstraint);

Теги: .NET

Статьи по теме:

Объекты, члены и абстрагирование
Запись трассировочных данных в журнал событий
Создание перегруженных методов
Установка сборок в виде компилированных образов
Towards Cleaner Code, A C# Asynchronous Helper
Обработка событий клавиатуры на уровне формы
Стандартная система типов CTS
Компиляция и исполнение .NET-приложений
Применение объектов DataSet и обновление данных
Преобразование типов
Редактор файловой системы
Модификаторы доступа для вложенных типов
Специальные возможности и элементы управления Windows Forms
Использование провайдеров дополнительных свойств
Извлечение из сопутствующих сборок ресурсов, специфичных для культуры
| .NET | Pavel |
 


Пн Вт Ср Чт Пт Сб Вс
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31


     



Rambler's Top100

Данный сайт или домен продается ICQ: 403-353-727

© 2009 Seoliga.ru | .NET | Объект DataRelation. Регион сайта: Москва и Санкт-Петербург