1. Введение.

ADO - интерфейс, призванный обеспечить клиентское приложение доступом и возможностями манипулирования внешними данными. ADO является интерфейсом программного уровня к OLE DB (интерфейсом чрезвычайно удобным и высокопроизводительным). ADO и OLE DB составляют вместе технологию Универсального Доступа к Данным(UDA). При этом, являясь интерфейсом высокого уровня к OLE DB, ADO использует OLE DB поставщики данных (на данный момент это, в основном, провайдеры реляционных баз данных, хотя уже появляются поставщики для нереляционных источников данных и систем электронной почты).

Стоит отметить, что корпорация Microsoft во всеуслышанье заявляет, что ADO в ближайшее время заменит огромное разнообразие моделей и технологий доступа к данным, включая такие методы самой Microsoft, как DAO, RDO.

Примечание:

В дальнейшем в статье подразумевается, что читатель знаком с интерфейсами OLE DB, такими понятиями, поставщик и потребитель данных, имеет базовые знания по COM.

Также хотелось бы отметить, что данная статья явилась результатом попытки автора тщательно разобраться в технологии ADO и систематизировать полученные в итоге знания (а также сведения из лит.источников) и, естественно, статья не может на что-то претендовать (кроме критики J,) тем более на оригинальность.

2. Объектная модель ADO.

ADO состоит из следующих основных компонентов:

Объекты:

Connection. ADO использует объекты Connection для предоставления отдельных соединений с источником данных.

Command. Объекты Command используются для предоставления конкретных команд, выполняемых над источником данных. Эти объекты используются для отслеживания параметров, связанных с командой.

Parameter. Объекты Command содержат коллекцию Parameters, включающую все связанные с командой параметры. Каждый отдельный объект Parameter служит для хранения информации о параметре, передаваемом в исполняемую команду или возвращаемом в ней.

Recordset. Объекты Recordset обеспечивают взаимодействие с данными. Они используются для хранения набора записей, возвращаемого из источника данных.

Field. Объекты Recordset содержат коллекцию объектов Field, используемых для для работы с отдельными столбцами группы строк.

Property. Объекты Connection, Command, Recordset, Field содержат коллекцию Properties объектов Property. Объекты Property служат для представления дополнительных параметров или свойств объекта ADO, которые не могут управляться встроенными свойствами объекта.

Error. Предназначены для представления информации об ошибках, которые могут происходить в рамках одной операции.

Коллекции:

Fields.

Properties.

Parameters.

Errors.

3.Немного о директиве #import

Директива препроцессора #import позволяет автоматически создавать библиотеку типов COM с классами С++ для COM интерфейсов. Это очень удобно, если у вас отсутствует доступ к MIDL-файлам. Использование этой директивы Visual C++ существенно упрощает работу с объектами, методами и свойствами ADO.

При включении директивы #import препроцессор компилятора формирует два заголовочных файла, содержащих библиотеку типов в виде исходного текста на С++. Главный заголовочный файл (с расширением .tlh) содержит описание классов плюс объявление интеллектуального указателя (smart pointer - _com_ptr_t):

_COM_SMARTPTR_TYPEDEF(INameOfInterface, __uuidof(INameOfInterface));

При подобном использовании макроса _COM_SMARTPTR_TYPEDEF компилятор объявляет интеллектуальный указатель INameInterfacePtr.

Примечание: _com_ptr_t - шаблонный класс, инкапсулирующий указатель на COM-интерфейс. Объект _com_ptr_t автоматически вызывает методы инкапсулированного в нем интерфейса AddRef() при создании объекта и Release() при выходе объекта из области видимости, корректно управляя существованием COM-объекта.

Вспомогательный заголовочный файл (.tli) содержит реализацию классов библиотеки типов.

Директива #import имеет вид:

#import "имя_файла" [атрибуты]

или

#import <имя_файла> [атрибуты]

имя_файла - обычно файл следующих типов: .tlb, .odl, .dll, .exe, .ocx.

атрибуты:

exclude - исключает генерируемого в заголовочных файлах кода определенные элементы или библиотеки типов

high_method_prefix - задает префикс, который будет ставится в начале имен методов и свойств верхнего уровня

high_property_prefixes - задает префикс для стандартных имен Get, Put и PutRef, который будет поставлен в начале имени метода при обращении к свойству.

implementation_only - запрещает создание основного заголовочного файла

include(…) - включает объявления других библиотек типов, определение которых встречаются в других системных файлах

inject_statement - помещает строку текста в начале объявления объявления пространства имен заголовочного файла для библиотеки типов.

named_guides - указывает компилятору определить и инициализировать переменные со старыми GUID

no_auto_exclude - запрещает автоматическое исключение определений элементов

no_implementation - запрещает генерацию файла .tli

no_namespace - Не используется пространство имен, спецификация которого находится в операторе library

raw_dispinterfaces - указывает компилятору генерировать все вызовы методов и свойств посредством функции Invoke и возвращать код ошибки HRESULT. Оболочки верхнего уровня не генерируются.

raw_interfaces_only - позволяет предоставить содержимое библиотеки типов только нижнего уровня, подавляя генерацию заготовок функций верхних уровней

raw_method_prefix - присоединяет к заданному имени префикс raw_, который обычно подключается к функциям-членам низкого уровня

raw_native_types - заставляет использовать типы данных нижнего уровня (вместо _bstr_t - BSTR, вместо _variant_t - VARIANT)

raw_property_prefixes - позволяет задать префикс нижнего уровня для методов-свойств put, get и putref

rename - переименовывает библиотеку типов и предотвратить повторное использование имен

rename_namespace - указывает пространство имен, содержащее информацию о библиотеке типов.Итак, после нудных разъяснений по директиве #import, рассмотрим, каким образом ее (директиву) можно использовать для включения интерфейсов ADO в наше приложение.

Пропишем в файл stdafx.h (например) пресловутую директиву следующим образом:

#import "c:Program FilesCommon FilesSystemADOmsado15.dll"

no_namespace rename("EOF","ADOEOF")

В данном случае создаются классы из библиотеки типов msado15.dll, реализующей объекты ADO и поставляемой в рамках OLE DB SDK.

В параметре rename приходится переименовывать ADO константу EOF, так как она уже используется в заголовочных файлах stdio.h, ios.h, stream.h, включенных в afxwin.h.

4. Инициализация COM.

Здесь все просто:

перед работой с объектами ADO необходимо инициализировать среду COM. Делается это посредством вызова API функции

HRESULT CoInitialize(LPVOID pvReserved );

где

pvReserved пареметр, равный NULL .

Для выгрузки COM применяется функция

void CoUninitialize();

5. Установка соединения с источником данных.

Для этих целей, как отмечалось выше, используется объект Connection (подключение к источнику данных и управление этим подключением осуществляется с помощью методов Open(), Close() объекта Connection) .Хотя, стоит заметить, что вы можете не создавать его самостоятельно. Можно просто позволить ADO создать соединение, используемое объектами Recordset и Command. Однако вам необходимо создать объект Connection, если предполагается управление транзакциями (для создания и управления транзакциями предназначены следующие методы Connection: BeginTrans(), CommitTrans() и RoolbackTrans()).

Итак, создание соединения. Для этого предпринимаем следующие шаги:

1. Объявляем указатель на соединение:

_ConnectionPtr pConn;

2. Создаем объект Connection с помощью функции CreateInstance():

HRESULT CreateInstance( const CLSID& rclsid, IUnknown* pOuter=NULL, DWORD dwClsContext = CLSCTX_ALL )

где

rclsid - CLSID объекта;

pUnknown - указатель на внешний интерфейс при агрегировании;

dwClsContext - контекст запуска исполняемого кода.

Пример:

HRESULT hr;

hr = pConn.CreateInstance(__uuidof(Connection));

или

hr = pConn.CreateInstance(__uuidof(Connection), NULL,CLSCTX_INPROC_SERVER );


Информация о работе «Введение в ADO»
Раздел: Информатика, программирование
Количество знаков с пробелами: 25509
Количество таблиц: 2
Количество изображений: 0

Похожие работы

Скачать
35963
32
2

... /загружать в/из файла. Его можно сохранять/загружать в/из текстовой строки. Он может загружать данные из объекта Record или какого-либо ресурса по URL. Его можно клонировать. Для иллюстрации работы с объектом Stream приведу-таки пример на VB6, который сохраняет изображение в файл без использования инструкции Put: Dim stream As New ADODB.stream 'Тип потока - бинарный stream.Type = ...

Скачать
31935
18
6

... string Company;  public string Phone;  public string Fax;  // Для отложенной загрузки списка заказов необходимо перейти  // от использования ArrayList к использованию специального класса из  // ObjectSpaces – ObjectList.  public ObjectList Orders = new ObjectList(); } public class Order {  private int _orderID = 0;  public int OrderID  { get {return _orderID;} ...

Скачать
114140
0
0

... данных базы и их представление. С помощью встроенных средств и инструментов базы данных создается пользовательский интерфейс, позволяющий управлять процессами ввода, хранения, обработки, обновления и представления информации базы данных.[2] 4 ЭТАПЫ РАЗРАБОТКА ПРОГРАММНОГО ПРОДУКТА Данная программа создана для учета успеваемости студентов. Для работы с программой необходимо нужные группы или ...

Скачать
79258
97
1

... форматами поддерживает OLE DB Persistence Provider. Кроме сохранения, можно также загружать (восстанавливать) объект Recordset из файлов. Сохранение и последующая загрузка рекордсета из файла в формате XML дали возможность использования XML-документов в качестве баз данных. OLE DB Persistence Provider жестко задает формат результирующего XML-документа: для описания структуры и типов узлов всегда ...

0 комментариев


Наверх