Четверг Мая 17 , 2012
TEXT_SIZE
   


Недостатки передачи обновлений с использованием объектов Recordset ADO

Индекс материала
Недостатки передачи обновлений с использованием объектов Recordset ADO
Страница 2

К сожалению, у функций обноапения, предоставляемых ядром курсоров ADO, есть и недостатки — низкая производительность и ограниченные возможности управления. С момента выхода ADO 1.5 бесчисленное множество разработчиков передавало обновления в БД средствами ядра курсоров ADO, так что эти проблемы решаемы. Тем не менее они достаточно велики. Чтобы глубже понять указанные недостатки, посмотрим, как ядро курсоров ADO передает изменения в БД. При вызове метода Recordset,.UpdateBatcb ядро курсоров ADO сканирует объект Recordset на наличие измененных записей и преобразует изменения отдельных записей в SQL-запрос, редактирующий соответствующую запись БД. Ранее я говорил о разработчиках, создающих собственные SQL-запросы UPDATE, INSERT и DELETE для изменения содержимого БД.

Ядро курсоров ADO генерирует аналогичные операторы. Для наблюдения за SQL-обращениями к БД годится SQL Profiler. Просмотрев запросы, генерируемые ядром курсоров ADO для передачи изменений в БД, вы увидите вызов хранимой процедуры SQL Server sp_execute$ql с пакетом парамет ризованных запросов. Этот вызов эквивалентен следующим запросам: DELETE FROM [Order Details] WHERE OrderlD = 10503 AND ProductID = 14 UPDATE [Order Details] SET Quantity = 40 WHERE OrderlD = 10503 AND ProductID = 65 AND Quantity = 20 INSERT INTO [Order Details] (OrderlD, ProductID, Quantity, UnitPrice) VALUES (10503, 1, 24, 18) После повторного исходный запрос и изменения, программно вносимые в содержимое объекта Recordset, должны стать вам понятны, т. е. вы сможете посмотреть на запросы и понять их назначение, даже если не умеете создавать их самостоятельно.

Преобразовывать изменения содержимого Recordset в SQL-запросы очень просто, если вам известно происхождение данных. Нам вполне понятно происхождение данных, но как о нем узнает ядро курсоров ADO? Выбрав результаты запроса, ядро курсоров ADO также запросило из БД дополнительные метаданные. Чтобы сконструировать приводившийся выше запрос UPDATE, ядро курсоров должно знать имя базовой таблицы и столбца для каждого поля, а также обладать сведениями о первичных ключах таблиц, упомянутых в запросе.

Для просмотра этих данных самостоятельно достаточно воспользоваться в коде набором Properties объекта Field ADO: With rs. Fieldsf'Quantity") Debug. Print "BaseTableName = " &.Properties("BaseTableName") Debug, Print "BaseColumnName = " &,PropertiesC'BaseColumnName") Debug. Print "KeyColumn = " &.Properties("KeyColumn") End With Здесь проявляется первый значительный недостаток функций обновления, предоставляемых ядром курсоров ADO, — производительность. Запросы, генерируемые ядром для получения из БД сведений о таблицах, столбцах и первичных ключах, сильно снижают производительность.



Добавить комментарий


Защитный код
Обновить

Рейтинг пользователей: / 0
ХудшийЛучший 

Метео

Войти

Голосование

Идеальный вариант проведения новогодней корпоративной вечеринки - это…

Сейчас на сайте

Сейчас 7 гостей онлайн