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

 

Реклама
bulletinsite.net -> Книги на сайте -> Вебмастеру -> Сеппа Д. -> "Microsoft ADO.NET" -> 127

Microsoft ADO.NET - Сеппа Д.

Сеппа Д. Microsoft ADO.NET — М.: Русская Редакция, 2003. — 640 c.
ISBN 5-7502-0223-2
Скачать (прямая ссылка): mcrsftado2003.pdf
Предыдущая << 1 .. 121 122 123 124 125 126 < 127 > 128 129 130 131 132 133 .. 260 >> Следующая

ds.Tablesf"Order Details"].Columns.Add*"ItemTotal", typeof(Decimal),
"Quantity * UnitPrice"); ds.Tables["Orders"].Columns.Add("Numltems", typeof(int),
"Count*Child.ProductID)"); ds.Tables["Orders"],Columns.Add*"OrderTotal", typeof(Decimal),
"Sum(Child.ItemTotal)");
Основанные на выражениях объекты DataColumn также позволяют получать информацию из участвующего в отношении родительского объекта DataTable. В одном из предыдущих примеров мы рассматривали «многие ко мно-
гим* междутаблицами author и title БД pubs: фрагмент кода выводил списоккниг, которые автор написал сам или в работе над которыми принимал участие.
Можно упростить этот код, добавив в объект DataTable titleauthor основанный на выражении объект DataColumn, который использует отношение между объектами DataTable titleauthor и title и возвращает значение объекта DataColumn title. После этого нам больше не придется искать требуемую запись в объекте DataTable
С помощью (;,il',4IVi!tNnir.
276 Часть III Автономная работа с данными: объект DstsSet модели ado.mit
Visual Basic .NET
Dim ds As New DataSetO
ds. Relations.Add*"authors.titleauthor",
ds.Tables("authors").Columns*"au_id"), _ ds,Tables*"titleauthor").Columns*"au_id"), False)
ds.Relations.Add*"titles_titleauttior", _
ds,Tables*"titles"),Columns*"title_id"),
ds.Tables*"titleauthor").Columns*"tltle„id"),
ds.Tables*"titleauthor").Columns.Add*"title", GetType(String), _
"Parent(titles_titleauthor).title") Dim rowAutiior, rowTitlsAuthor As Dataflow
Each rowAuthor In ds.Tables*,,au1:hors").Rows
Console.W< iteLlne* rowAuthor( "au_ln:ime") & A rowAuthor* •"au.fnaae"))
For Each rowTitleAuthor In
rowAuthor.GetChildRows*"authors_titleauthor") Console.WriteLlne(vbTab & rowIitleAutrior*"title"))
Next rowTitleAuthor Next rowAuthor
Visual C# .NET
DataSet ds = new DataSetO;
ds,Relations.Add*"authors_titleauthor",
ds.Tables["authors"].Columns!"au_id"]. ds.Tables["titleauthor"].Columns["au_id"], false);
ds.Relations.Add*"titlesjtitleauthor",
ds.Tables["titles"].Columns["title_ld"], ds.Tables["tltleauthor"].Columns["title^id"], false);
ds. Tables["tltleautho r"].Columns.Add*"title", typeof(string),
"Parent*titles_titleauthor).title");
foreach (DataRow rowAuthor in ds.Tables["authors"].Rows) *
Console.WritsLine(ro«Author["au_iname"l + +
rowAuthor["au_fname"]); foreach (DataRow rowTitleAuthor in
rowAuthor.GetChildRows("authors_titleauthor")}
ГЛАВА 7 Работа с реляционными данными 277
Console. WriteLine("\f + rowTitleAoi:hor["tlt3e"]):
}
Полный шшж агрегатных функций для свойства Expression — в документации >!11 > N
Каскадирование изменений
Иногда изменения содержимого записи должны отражаться на связанных данных. Например, удалив заказ, вы, возможно, захотите удалить и входившие в него товары.
Различные СУБД по-разному разруливают данную ситуацию. Ограничение FOREIGN KEY в таблице Order Details БД Northwind SQL Server гарантирует, что пользователь не сможет удалить из таблицы Orders запись, связанную с записями таблицы Order Details. В SQL Server 2000 реализована поддержка каскадных изменений на основе ограничения FOREIGN KEY. Определяя ограничения FOREIGN KEY вы можете быть уверены, что при обновлении или удалении записи изменения автоматически каскадируются в записи связанной таблицы. На рис. 7-6 показано диалоговое окно SQL Server 2000 для настройки параметров ограничения FOREIGN KEY.
г.т1л-- fr*.4vn^ \-Л~г-^-^ j the* untfwtl Ij*> uteri Crt& ?'«iP±
?гЫwrf* тшт fpV^yift 3**JM" """"
'If fill On.*
1] *rdf i S i
i
P M>Ca . " r. - ¦: | . I i! г. - relsjonship л* ^.^-Vs ere :.«ИГ&
Г CbStMteUpdSK ftd&ttc Fields
I па. I ни
Рис. 7-6. Настройка параметров каскадирования для ограничения l-OREKIp.
KEY в SQL Server 2000
Объект Foreif-fiKryijivstma, модели ADO.NET обладает аналогичными возможностями. Он предоставляет свойства DeleteRule и .' juki!\.-Riih. определяющие, что
произойдет при изменении данных записи родительской таблицы, на которой
определено ограничение FOREIGN KEY.
Свойства DeleteRule и UpdateRuie объекта ForeignKeyConstraint
Свойства DeleteRule и UpdateRule принимают значения из перечисления Rule, относящегося к пространству имен Sysie-aJXita Значение обоих этих свойств по умолчанию — Cascade, т. е. при удалении записи родительского объекта ПШаТяЫе
278
Часть III Автономная работа с данными: объект DataSet модели ADO.NET
также удаляются дочерние записи связанного объекта l'hikiTtihh-. Если измените значение поля в родительском объекте DataTable, на котором определено ограничение FOREIGN KEY (например, измените значение поля <д.ыотегШ объекта I'dtaioi'k. Customers), это значение также обновится и в связанных записях дочернего объекта DataTable,
Другие возможные значения свойств DeleteRule и UpdateRule— Nom, SttDefault и 5e«V'««* Если значение свойства — None, связанные данные из дочер-
него объекта DataTable не удаляются. Если нужно изменить родительскую запись и задать одному из задействованных в ограничении полей значение NULL, задайте свойству DeleteRule и/или свойству UpdateRule значение NULL. Точно так же, если задать этим свойствам значение SclDefaidt полям дочерней записи, задействованным в ограничении FOREIGN KEY, будет задано значение свойства Default.
Предыдущая << 1 .. 121 122 123 124 125 126 < 127 > 128 129 130 131 132 133 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100