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

 

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

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

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

ds.TablesC"Customers"].Columns["CustomerlD"], ds.Tables["Orders"].Columns["CustomerlD"]);
Console.WriteLine('The parent DataTable now contains +
ds. Tables["Customers"].Constraints.Count +
" constraints"); Console.WriteLine{"The child DataTable now contains " +
ds.Tablest"Orders"].Const raints.Count +
" constraints");
Использование имеющихся ограничений
Ограничения можно также определять заблаговременно; новый объект ВШШШШм воспользуется имеющимися ограничениями вместо того, чтобы создавать I ГОПЫС:
Visual Basic .NET
Dim ds As New CataSetO daCustomers. FilKds, "Customers") daOrders. FilKds, "Orders") cn.CloseO
With dS.TablesCCustomers")
.PrimaryKey = New DataColumnf) {.Columns("CustomerID")}
End With
With ds.TablesC'Orders")
. Constraints.Add("FK_CustomersOrders", _
268
Часть III Автономная работа с данными: объект DataSet модели АСС.КЕТ
ds.Tables("Customers").Columns("CustomerlD"), _ .Columns("CustomerlD"))
End With
ds. Relationships.Add("CustomersOTders", _
ds.Tables("Customers").Columns("CustomerlD"), _ ds.Tables("Orders").ColumnsC"CustomsrID"))
Console. WriteLine( "The parent DataTable now contains " & _
ds.Tables("Customers").Constraints.Count &
" constraints") Console.WriteLine("The child DataTable now contains " & _
ds.TablesC'Orders"),Constraints.Count ?
" constraints")
Visual C# NET
DataSet ds = new DataSetQ; daCustomers.Fill(ds, "Customers"); daOrders. Fill(ds, "Orders"); cn.Close();
DataTable Ий = ds.Tables["Customers"];
Ш. PrimaryKey = new DateColi«in[] {tbl. Columns["'CustomerlD"]);
tbl = ds.Tables["Orders"];
tbl.Const raints.Addf"FK_Custome rsO rders",
ds.Tables["Customers"].Columns["CustomerlD"],
tbl.Columns["CustomerID"]);
ds.H3latlonship8.Adu("Custoi>6rs0^ers".
ds.Tables["Customers"].Columns["CustomerlD"], ds.Tables["Orders"].Columns["CustomerlD"]);
Conscle.WritelinsCThe parent DataTable now contains +
ds.Tables["Customers"]. Constraints.Count +
" constraints"); Console.Writetine("The child DataTable now contains " +
ds.Tables["Orders"].Constraints.Count +
" constraints");
Смотри-ка! Нет ограничений!
Как вы помните, при создании объекта DataRelation ADO.NET по умолчанию добавляет в объект DataSet ограничения UniqueKeym ForeignKeyCon$traint,cmnaTy-ры которых соответствуют аналогичным сигнатурам нового объекта DataRelation. Если в объекте D&toSiit эти ограничения уже есть, DataRelation станет ссылаться на них. В противном случае ADO.NET явно создаст новые ограничения.
ГЛАВА 7 Работа с реляционными данными 269
Однако есть еще один вариант. В одном из разделов, посвященном конструкторам класса DataRelation, говорилось, что есть конструкторы, позволяющие A DO..'-ITT запретить создавать ограничения для объекта DataRelation. Такие конструкторы полезны, если вам нужен объект DataRelation, но не требуются соответствующие ограничения в объекте
Ограничения ForeignKeyConstrain; и значения Null
Возможно, мне удастся аас удивить. Например, я не мог и предположить, что даже при наличии ограничения в БД и объекте
Datatei вполне могут появиться «осиротевшие» /шише.
Вы мне не верите? Выполните следующий запрос к своей любимой БД . Noun wind (выполнять похожие запросы к производственным БД при раз- работке приложений или изучении ADO.NET не рекомендуется).
UPDATE Orders SET Customers = NULL WHERE CustomerlD = ' ALFKI'
Запрос успешно завершится, и в таблице Orders появится не .
связанные с какой-либо записью таблицы Customers. Чтобы вернуть все на свои места:
UPDATE Orders SET CustoaerlD = "ALFKI" WHERE CustomerlD IS NULL
Убедиться, что на таблице Orders определено ограничение ForeignKey-Constmint Y, можно, выполнив приведенный ниже запрос. Если в таблице : Customers нет записи, значение поля CustomerlD которой — ZZ2ZZ, запрос
завершится с ошибкой:
UP'VCfr Orders SET CustomerlD = ZZZZZ' WHERE CustomerlD = ANTON'
хотя бы одно поле указанное в ограничении Foreign-
RevCnnst'-ai/ir, содержит значение NULL, не проверяются на соответствие этому ограничению. Помните об этом, определяя схему БД и объекта DataSet.
Объекты ссылающиеся на себя
Иногда родительская и дочерняя таблицы, участвующие в отношен ни. являются одним и тем же объектом. Возьмем таблицу Employees БД Northwind. В ней есть столбец EmployeelD с идентификатором сотрудника, а также столбец ReportsTo с идентификатором руководителя сотрудника. Кроме того, на столбце ReportsTo определено ограничение FOREIGN KEY, гарантирующее, что данный столбец принимает только значения из столбца EmployeelD.
Следующий фрагмент кода выбирает из таблицы Employees данные в объект DataSet и создает ссылающийся на себя объект DataRelationVisual Basic .NET
Dim strConn. strSQL As String
strConn = "Provider=SULOLEDB;Data Source=(Local)\NetSDK;" &_ "Initial Catalog=Northwind;Trusted_Connection=Yes;"
StrSQL = "SELECT EmployeelD, ReportsTo, " &
"LastName + ', 1 + FirstName AS EmployeeName FROM Employees"
270
Часть III Автономная работа с данными: объект DataSet модели ado.net
Dim da As New 01eDbDataAdapter{strSQL, strConn) Dim ds As New DataSet () da.Fill(ds, "Employees") Dim tbl As DataTable = ds.Tables("Employees") ds.Relations.AddC"SaltReferencing", tbl.Columns("EmployeelD"), _ tbiColumns("ReportsTo"), False)
Предыдущая << 1 .. 118 119 120 121 122 123 < 124 > 125 126 127 128 129 130 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100