Недостатки передачи обновлений с использованием объектов 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, — производительность. Запросы, генерируемые ядром для получения из БД сведений о таблицах, столбцах и первичных ключах, сильно снижают производительность.
Основы работы с Microsoft ADO.NET
Использование поставщика данных .NET
Метео


