Хотя ODBC считается хорошим интерфейсом передачи данных, тем не менее как программный интерфейс он имеет много ограничений. Для преодоления этих трудностей неоднократно предпринимались попытки создания специальных оболочек. Например, было предложено использовать в Access и Visual C++ объектную модель Data Access Objects (DAO), которая состоит из объектов для баз данных (Database), определений таблиц (TableDef), определений запросов (QueryDef), наборов записей (RecordSet), полей, свойств и т.д.
DAO обеспечивает совместимый объектно-ориентированный интерфейс, предназначенный для выполнения всех функций, которые связаны с базой данных. DAO - это не только чрезвычайно мощная, но также достаточно удобная технология, имеющая следующие функциональные возможности.
- Создание и редактирование баз данных, таблиц, запросов, индексов, полей, правил целостности на уровне ссылок и защиты.
- Возможности обращения к данным с помощью SQL, а также методы, полезные для управления и поиска данных в таблицах и данных, следующих из запросов.
- Поддержка транзакций, их начала, совершения и отмены. Транзакции могут быть представлены в форме вложений и являются очень полезными для выполнения большого количества операций с базой данных как единого действия.
- Создание пользовательских свойств, основанных на различных технологиях DAO.
- Восстановление и сжатие базы данных с помощью языка программирования.
- Поддержка присоединения к базе данных разработчика удаленных таблиц, а также управление соединением.
Однако модель DAO прежде всего предназначалась для осуществления прямого доступа к базовой технологии продукта Access фирмы Microsoft, а именно к ядру JET механизма базы данных. Более того, DAO не полностью соответствует спецификациям ODBC. Для взаимодействия с другими механизмами баз данных фирмы Microsoft, например, с Visual Fox Pro и SQL Server, а также для преодоления снижения интереса к DAO была предложена новая спецификация Remote Data Object (RDO), вошедшая в состав Visual Basic 4.0 Enterprise Edition.
Если интерфейс ODBC применяется операционной системой, как правило, для доступа к реляционным БД, использующим структурированный язык запросов SQL, то интерфейс OLE DB является более универсальной технологией для доступа к любым источникам данных.
Фирма Microsoft определила также набор объектов данных под названием OLE DB (Object Linking and Embeding for Databases), который позволяет OLE-ориентированным приложениям совместно использовать и управлять наборами данных как объектами. Технология OLE DB обеспечивает доступ к любым источникам данных, включая реляционные и нереляционные базы данных, файловые и почтовые системы, текст, графику, настраиваемые бизнес - объекты и многое другое. Технология OLE DB является объектно-ориентированной спецификацией на основе С++API. Поскольку компоненты могут рассматриваться как комбинация процесса и данных внутри безопасного и повторно используемого объекта, то они могут рассматриваться одновременно и как потребители данных, и как поставщики данных. Потребители получают данные от OLE DB-интерфейса, а поставщики передают их ему.
Данные, разделяемые между приложениями называются OLE объектом. Приложение, которое может содержать OLE объекты, называют OLE контейнером (OLE Container). Приложение, данные из которого можно включить в OLE контейнер в виде OLE объекта, называют OLE сервером.
Как следует из названия, OLE объекты можно либо присоединить к OLE контейнеру, либо включить в него. В первом случае данные будут храниться в файле на диске, любое приложение будет иметь доступ к этим данным и сможет вносить изменения. Во втором случае данные включаются в OLE контейнер и только он сможет просматривать и модифицировать эти данные.
�нтерфейс OLE DB (связывание и встраивание объектов баз данных) обеспечивает доступ к источникам данных через стандартный интерфейс COM (объектная модель компонентов). Данные могут быть представлены в любом виде и формате например, в качестве данных могут выступать реляционные БД, электронные таблицы, документы в rtf-формате и т.д.) В интерфейсе OLE DB используется механизм провайдеров, под которыми понимаются поставщики данных, находящиеся в надстройке над физическим форматом данных. Такие провайдеры еще называют сервис - провайдерами, благодаря им можно объединять в однотипную совокупность объекты, связанные с разнообразными источниками данных.
Кроме того, различают OLE DB - провайдер, который реализует интерфейс доступа OLE DB поверх конкретного сервис-провайдера данных. Причем поддерживается возможность многоуровневой системы OLE DB -провайдеров, когда OLE DB -провайдер может находиться поверх группы OLE DB провайдеров или сервис - провайдеров.
�нтерфейс OLE DB может использовать для доступа к источникам данных интерфейс ODBC. В этом случае применяется OLE DB провайдер для доступа к ODBC-данным. Таким образом, интерфейс OLE DB не заменяет интерфейс ODBC, а позволяет организовать доступ к источникам данных через различные интерфейсы и в том числе ODBC.
Технология ADO позволяет писать клиентские приложения для доступа и манипулирования данными, хранящимися в БД. Основные преимущества ADO: простота использования, высокая скорость, требуемый малый объем верхней памяти и дискового пространства.
�нтерфейс ADO (Active X Data Object) представляет иерархическую модель объектов для доступа к различным OLE DB - провайдерам данных. Он характеризуется еще более высоким уровнем абстракции и базируется на интерфейсе OLE DB. Объектная модель ADO включает небольшое количество объектов, которые обеспечивают соединение с провайдером данных, создание SQL-запросов к данным, создание набора записей на основе запроса и др. �нтерфейс ADO предназначен для использования в �нтернет / �нтранет сетях для доступа к различным источникам данных.
Особенность функционирования Web-приложений, использующих интерфейс ADO, заключается в том, что обозреватель может извлекать информацию из любого источника данных, находящегося в сети �нтернет, заранее не имея представления о логической структуре, типе и физическом формате источника данных. То есть появляется возможность публиковать требуемую информацию в �нтернет, не показывая внутреннюю структуру данных.
Объекты Connection, Recordset и Command - основные элементы ADO для взаимодействия с данными. Каждый из перечисленных объектов имеет коллекцию Properties. Структурная модель объектов ADO приведена ниже на рисунке. Рассмотрим по порядку все три объекта.
Объект Connection представляет соединение с источником данных OLE DB. Объекты Connection можно создавать независимо от ранее созданных объектов. Объект Connection представляет собой выделенный сеанс связи с источником данных. В случае архитектуры клиент/сервер этот объект может выступать эквивалентом соединения с сервером. �спользуя коллекции, методы и свойства объекта Connection, можно выполнять следующее:
- конфигурировать соединение перед его установкой;
- указывать базу данных, которая будет использоваться по умолчанию;
- устанавливать уровень изоляции для транзакций;
- выбирать OLEDB-провайдера;
- устанавливать, а затем разрывать физическое соединение с источником данных;
- выполнять команды для установленного соединения;
- управлять транзакциями, включая вложенные транзакции, если провайдер поддерживает их;
- обрабатывать ошибки, возвращаемые источником данных; определять версию ADO.
Объект Command можно создавать независимо от ранее созданных объектов Connection. Объекты Command используются для получения записей и создания объектов Recordset, для выполнения больших операций или для изменения структуры БД. �спользуя коллекции, методы и свойства объекта Command можно производить следующие действия:
- указывать на установленное соединение и объект Command с помощью свойства;
- устанавливать время задержки выполнения команды;
- тип команды для определения приоритета выполнения;
- определять, установлен ли приоритет выполнения команд;
- управлять аргументами, передаваемыми провайдеру и получаемыми от него;
- выполнять команды и возвращать объект Recordset.
Объект Recordset представляет полный набор записей таблицы данных или результат выполненной команды. В любое время объект Recordset ссылается только на одну запись из текущего набора. Объекты Recordset можно создавать независимо от ранее созданных объектов Connection. Объекты Recordset используют для управления данными на уровне записей. При использовании ADO, почти всегда управление данными происходит с помощью объектов Recordset. Все объекты Recordset строятся с использованием записей (строк) и полей (столбцов). Возможно использование четырех различных типов курсора при открытии объекта Recordset:
- Dynamiccursor- позволяет просматривать добавления, изменения и удаления, сделанные другими пользователями; позволяет любые виды перемещений внутри Recordset, которые не используют закладок; разрешает использовать закладки, если провайдер их поддерживает;
- Keysetcursor - ведет себя как и Dynamiccursor, за исключением того, что предотвращает просмотр записей, добавленных другими пользователями, и защищает от доступа к записям, удаленным другими пользователями из набора Recordset; всегда поддерживает закладки и любые типы перемещений внутри Recordset; данные, измененные другими пользователями, будут видны;
- Staticcursor - обеспечивает статическую копию набора записей, используемую для поиска данных или генерации отчета; добавления, изменения и удаления других пользователей здесь не видны;
- Forward-onlycursor - ведет себя идентично Staticcursor Р·Р° исключением того, что позволяет просматривать записи только РІ РѕРґРЅРѕРј направлении - вперед. Рто улучшает выполнение РІ случае РєРѕРіРґР° нужно “пробежаться” РїРѕ всем записям только РѕРґРёРЅ раз.
Таким образом, интерфейс ADO позволяет стандартизовать все существующие интерфейсы для доступа к любым данным в �нтранет/�нтернет сетях. Он объединяет все существующие интерфейсы и предоставляет однообразный способ для доступа к любому источнику данных через любой интерфейс.