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

 

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

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

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

добавить только в дочернюю таблицу, или необходимо также добавить эту
запись в родительские таблицы?
• Синхронизация результатов соединяющих запросов затруднена. Когда вы изменяете родительскую запись (например, вы изменили контактное имя клиента), обновленные данные требуется передать в БД и затем повторно аы-полнить запрос, чтобы изменение проявилось также во всех записях набора результатов.
Отдельные запросы
Общеизвестно, что результаты соединяющего запроса очень трудно обновить средствами технологии доступа к данными типа РА() или ADO, и поэтому многие разработчики используют отдельные запросы, выбирая данные из таблиц в отдельные структуры.
Преимущества отдельных запросов таковы:
258
Часть III Автономная работа с данными: объект DataSet модели
• в целом они возвращают меньше данных, чем соединяющие запросы;
• они больше подходят для обновления результатов. Поскольку вы изменяете структуру (например, объект Recordset), соответствующую отдельной таблице, технология типа ADO легко интерпретирует изменения и соответствующим образом модифицирует данные БД;
• отдельные запросы позволяют обращаться к разным источникам данных. Если связанные таблицы относятся к различным СУБД, данная возмож-
п ".тъ вам пригодится.
Недостатки отдельных запросов;
• отдельные запросы требуют синхронизирующего кода. Чтобы найти заказы, размещенные конкретным клиентом, следует определить фильтр для дочернего объекта Recordset и написать код, синхронизирующий объекты Recordset друг с другом;
• фильтрация результатов отдельных запросов затруднена. Создание запросов к дочерним таблицам, которые возвращают только записи, связанные с записями, полученными из родительской таблицы, — в общем-то, проблематично. Подробнее об этом — в следующих разделах главы.
Иерархичные объекты Recordset ADO
В ADO 2.0 реализована концепция объектов Recordset. Специальный
поставщик данных и специальный синтаксис запроса позволили объединять ре-нескольких запросов в одну структуру. Следующий фрагмент кода помещает содержимое таблиц Customers, Orders и Order Details в иерархичный объект
Recordset:
Dim rsCustomers As ADODB. Recordset, rsOrders As ADODB. Recorders
Dim rsOrderDetails As ADODB. Recordset
Dim strConn As String, strSQL As String
strConn = "Provider=MSDataShape;Data Provider=SQLOLEDB;" &
"Data Source=(local)\NetSDK;Initial Catalog=Northwind;" & "Trusted_Connection=Yes;"
strSQL = "SHAPE {SELECT Customs rID, CompanyName, Contact Name, " & "ContactTitle FROM Customers} AS Customers APPEND " & _ "((SHAPE {SELECT OrderlD, CustomerlD, EmployeelD, OrderDate " 4 _ "FROM Orders} AS Orders APPEND ({SELECT OrderlD, ProductID, " & _ "UnitPrice, Quantity FROM [Order Details]} AS OrderDetails " & _ "RELATE 'OrderlD- TO 'OrderlD'} AS OrderDetails) AS Orders " & _ "RELATE 'CustomerlD' TO 'CustomerlD') AS Orders"
Set rsCustomers = New ADODB. Recordset
rsCustomers.Open strSQL, strConn, adOpenStatic, adLockBatcnOptimistic
Set rsOrders = rsCustomers.Fields("0rders").Value
Set rsOrderDetails = rsOrders. FieldsC'OrderDetails"). Value
У объекта Recordset есть три объектных переменных, однако все они ссылаются на данные, хранящиеся в одной структуре. Когда вы перемещаетесь по объекту Recordset верхнего дочерних объектах Recordset доступны только свя-
занные данные.
ГЛАВА 7 Работа с реляционными данными
259
Преимущества иерархичных объектов Recordset таковы:
• они возвращают меньше данных, чем соединяющие запросы;
• они возвращают данные в виде одной структуры;
• они годятся для простых обновлений. Несмотря на то, что нер.фхмч1- ые
объекты Recoidm хорошо справляются с простыми обновлениями, у них есть определенные ограничения. Б лучшем случае проблемы возникают при передаче отложенных изменений нескольких таблиц. У иерархичных объектов Recordset есть и недостатки:
• синтаксис запросов ужасен. Посмотрите-ка на этот запрос! Хоть я и считаю себя экспертом по ADO, я никогда и не думал изучать синтаксис SHAPE;
• ограничены возможности управления. В запросе нужно определять отношение;
• можно обращаться только к одному источнику данных;
• затруднена фильтрация.
Объекты модели ADO.NET
Структура объектов DataRelation ADO.NET сильно отличается от структуры иерархичных объектов Recordset. Объектам DataRelation не требуется дополнительный поставщик или отвратительный синтаксис запросов SHAPE. Объекты DataRelation считаются частью схемы объекта DataSet.
Если вкратце, объект DataRelation объединяет в себе преимущества отдельных запросов и иерархичных объектов Recordset в плане управления данными из связанных таблиц и исключает практически все их недостатки. Приведенные ниже списки «за» и «против» еще больше разожгут ваш интерес к объекту DataRelation.
Преимущества объектов DataRelation таковы:
• они возвращают меньше данных, чем соединяющие запросы;
• упрощают поиск связанных данных;
• не требуют сложного синхронизирующего кода;
• рассчитаны на сложные случаи обновления. Например, вы можете добавлять новых клиентов до добавления их заказов, а также удалять имеющиеся заказы перед удалением имеющихся клиентов. Также, если у вас есть группа отложенных изменений таблиц Orders и Order Details, перед передачей новых записей в таблицу Order Details можно выбрать для новых заказов автоинкрементные значения, генерируемые сервером. Подробнее о таких ситуациях -в главе i i:
Предыдущая << 1 .. 114 115 116 117 118 119 < 120 > 121 122 123 124 125 126 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100