Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разработка приложений баз данных (Visual Studio 2008).docx
Скачиваний:
143
Добавлен:
26.03.2016
Размер:
1.01 Mб
Скачать

Связанные таблицы и объекты DataRelation

Если в наборе данных имеется несколько таблиц, то данные, содержащиеся в них, могут быть взаимосвязаны. Набор данных не имеет встроенных сведений о таких отношениях, поэтому для работы с данными в связанных таблицах необходимо создать объекты DataRelation, которые описывают отношения между таблицами в наборе данных. ОбъектыDataRelationмогут использоваться для программного извлечения дочерних записей для указанной родительской и наоборот. Если база данных содержит отношения между двумя и более таблицами, средства разработки автоматически создадут объектыDataRelation.

Отношения в наборах данных

Набор данных может содержать связанные таблицы, как реляционная база данных. DataRelation– это объект, упрощающий связь между таблицами данных. В следующих разделах содержатся сведения об объектах ADO.NETDataRelation, о процедуре их создания и об их использовании для работы с данными в связанных таблицах.

Наборы данных, содержащие связанные данные таблиц, используют объектыDataRelationдля представления отношения подчинения между таблицами и возврата для каждой таблицы связанных записей из другой таблицы. При добавлении связанных таблиц в наборы данных с помощьюМастера настройки источника данныхилиКонструктора источников данныхсоздается и настраивается объектDataRelation.

Объект DataRelationвыполняет две функции:

  • Открывает доступ к записям, связанным с рабочей записью. Предоставляет дочерние записи при работе с родительскими (GetChildRows) и наоборот — предоставляет родительские записи при работе с дочерними (GetParentRow).

  • Вводит ограничения для обеспечения целостности данных, например, удаление связанной дочерней записи при удалении родительской записи.

Важно понять разницу между реальным объединением и использованием функции объекта DataRelation. При реальном объединении записи берутся из родительской и дочерней таблиц и помещаются в один плоский набор записей. При использовании объектаDataRelationновый набор записей не создается. Вместо этого отслеживаются отношения между таблицами и поддерживается синхронизация родительских и дочерних записей.

Отношения создаются соответствующими столбцами в родительской и дочерней таблице. Поэтому тип данных для обоих столбцов должно быть идентичным.

Отношения также могут передавать различные изменения из родительской DataRowв ее дочерние строки. Чтобы контролировать, как изменяются значения в дочерних строках, добавьте ограничение внешнего ключа (ForeignKeyConstraint)в коллекциюConstraintCollectionобъектаDataTable.ForeignKeyConstraintопределяет, какое действие выполнять при удалении или изменении значения в родительской таблице.

При создании DataRelationпервым делом определяется, может ли быть создано отношение. После добавления вDataRelationCollectionотношение поддерживается путем запрещения изменений, которые нарушат его. В период между созданиемDataRelationи его добавлением вDataRelationCollectionможно внести дополнительные изменения в родительские или дочерние строки. Исключение возникает, если это приводит к возникновению отношения, которое более не является допустимым.

Примечание. Если между двумя таблицами определена двунаправленная связь, может произойти порча данных. Двунаправленная связь состоит из двух объектов DataRelation, использующих одни и те же столбцы с перекрещивающимися ролями "родительский/дочерний". Исключение при сохранении объектов DataRelation не возникает; однако может произойти порча данных.

Объекты DataRelationсодержатся вDataRelationCollection, доступ к которой возможен с помощью свойстваRelationsобъектаDataSetи свойствChildRelationsиParentRelationsобъектаDataTable.

В следующем примере выполняется создание новогоDataRelationи добавление его в коллекциюDataRelationCollection объекта DataSet.

Язык C#

private void CreateRelation()

{

// Get the DataColumn objects from two DataTable objects

// in a DataSet. Code to get the DataSet not shown here.

DataColumn parentColumn =

Borei.Tables["Suppliers"].Columns["CodeSuppliers"];

DataColumn childColumn =

Borei.Tables["Goods"].Columns["CodeGoods"];

// Create DataRelation.

DataRelation suppliersGoodsRelation;

suppliersGoodsRelation = new DataRelation("suppliersGoodsRelation",

parentColumn, childColumn);

// Add the relation to the DataSet.

Borei.Relations.Add(suppliersGoodsRelation);

}