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

 

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

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

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

Visual C# NET
string strConn,
StrConn = "Provider=SQLOLEDB;Data Source=(local)\\NetSDK; " +
"Initial Catalog=Northwind;Trusted j;onnection=Yes; "; StrSQL = "SELECT EmployeelD, ReportsTo, " +
"LastName + \ ' + FirstName AS EmployeeName FROM Employees"; OleDbOataAdapter da = new 01eDbDataAdapter(strSQL, strConn); DataSet ds = new DataSetO; da.Fill(ds, "Employees"); DataTable tbl = ds.Tables["Employees"];
ds.Relations.Add("SelfReferencing", tbl.Columns["EmployeelD"], tbl.Columns!"HeportsTo"], false);
Создать / uiiiiKi-.-In!i< >n — только половина дела. Наша настоящая цель — вывести древовидный список всех сотрудников (рис. 7-4). Обход иерархии для вывода сотрудников по их руководителям связи si с определенными особен-
но если вы никогда не писали рекурсивный код. В таком случае рекомендую вам изучить документацию языка по вашему выбору и найти там необходимую инфор-мзц1ш\ поскольку вопросы рекурсии не вошли в эту книгу.
11 гг. flitdnu
u.'volle, totnev
i.cmc i i i'. i . i —
i ¦ ¦ . i . f ¦ i ¦-• i
.».4.-- ttivh-tel
«-.; «irnj '> 1 t« ¦ -jii! i.....
Рис. 7-4. Вывод содержимого ,jA......>i Employees с использованием
ссылающегося на себя объекта DataRclation
Прт.слллшым далее фрагмент кода просматривает содержимое объекта Data-Table и выводит данные о руководителе наивысшего ранга. В таблице Employees ему соответствует зип! !сь. значение поля ReportsTo ксл^р' и: — Подробнее о
значениях NULL и ограничениях Constraint — во врезке ¦¦Огрнипчеппя
ForeignKefionstraint и значения №М:
Обнаружив руководителя iumhu;. hici > рзмгз. код выводит его непосредственных подчиненных, добавляя перед их именами символ затем — под-
ГЛАВА 7 Работа с реляционными данными
271
чиненных этих подчиненных и так до тех пор, пока не останется сотредпм ;oi; имеющих кого-либо в подчинении.
Но достаточно объяснений — подать сюда код!
Visual Basic NET
Dim As DataRow
iFor Each row In tbl.Rows
If row.IsNull("ReportsTo") Then DisplayRow(row, "")
End If Next row
¦Public Sub DisplayRow(DataRow row, string strlndent) Console.WriteLine(strIndent i row("EmployeeName"))
Dim rowChild As DataRow
For Each rowChild in row.GetChildRows("SelfRefereпcing,,)
DisplayRowCrowChild, strlndent & vbTab) Next rowChild End Sub
Visual C# .NET
foreach (DataRow row in tbl.Rows; if <row.IsNull<"ReportsTo")) DisplayRowCrow, "");
static votd DxsplayRow(D3taftow row, string strlndent)
{
Console, WriteLire(3trIndent + rtMpEwpicyeetlame"});
foreach (DataRow rowChild in row.GetChildRows("SelfReferencing")) DisplayRow(rowChild, strlndent + "\t");
}
Примечание Руководителю наивысшего ранга соответствует запись
Employees, значение поля ReportsTo которой - NU1.L. Кроме того, можно сделать так, чтобы сотрудник подчинялся сам себе. Если вы имеете дело с таблицей, в которой реализован аналогичный подход к ееылаю-щимся на себя отношениям, вам потребуется слегка фрагмент кода.
Отношения ко многим»
В БД встречаются преимущественно отношения «один ко многим». Клиент может разместить несколько заказов, на несколько товаров каждый, а сотрудник может подчиняться нескольким начальникам. Есть также отношения ¦>многие ко v:::.Oii:^a* однако определить их в БД несколько труднее. Чтобы ионн п.. почему это так. рассмотрим таблицы authors и titles БД pubs SQL Server.
272 Часть III Автономная работа с данными: объект DataSet модели ADO.NET
Предположим, что между данными этих таблиц существует отношение «многие ко к , г-.. поскольку один автор мог написать несколько книг, а у одной книги может быть несколько авторов. Тем не менее эти две таблицы не связаны напрямую через ограничение поскольку это ограничение требует наличия уникального ключа. В связи с этим у дочерней записи не может быть несколько родительских записей в связанной таблице, т, е. здесь нет непосредственного отношения «многие ко многим».
В БД pubs также есть таблица titleauthor (рис. 7-5), позволяющая создать косвенное отношение «многие ко многим». В данной таблице определен составной первичный ключ, включающий поля au_id и title id - поля первичного ключа таблиц authors и titles соответственно.
S0I.5i.4wi l„|..,|iiiSt/Лдпчгч B«c.r«iiin'|'|il".'""'lucoiri ._ _ _'г 'X
Р gj ИМИ 8* j м!ШШ
^L___^-Lifj ¦
Рис. 7-5. Таблицы authors, I.ilk- и titleauthor БД nub;, SQL
Предположим, что над одной из книг работали двазкторз. В таблице titleauthor для такой книги будет две записи — по одной для каждого автора. Таким образом, таблица titleauthor позволит отыскать значения первичного ключа для всех авторов конкретной книги. Точно так же выполняется поиск значения первичного ключа всех книг, которые автор написал самостоятельно или в работе над которыми принимал участие.
Следующий код получает данные из всех трех таблиц. Он добавляет объекты Data-Relation, связывающие таблицу authors и titleauthor, а также таблицу titles и Далее код просматривает записи объекта authors, выводит имя
автора и затем при помощи объектов DataRelation выводит написанные этим автором книги.
Предыдущая << 1 .. 119 120 121 122 123 124 < 125 > 126 127 128 129 130 131 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100