45740 (Введение в ADO)

2016-08-02СтудИзба

Описание файла

Документ из архива "Введение в ADO", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "45740"

Текст из документа "45740"

Введение в ADO

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 );

3. после создания экземпляра класса Connection создаем соединение. С этой целью вызываем метод Open объекта Connection.

HRESULT Open(_bstr_t ConnectionString, _bstr_t UserID, _bstr_t Password, long Options=NULL);

ConnectionString - строка соединения (см.табл.1.1 и 1.2).

UserID - имя пользователя для подключения к источнику данных

Password - пароль пользователя

Options - позволяет указать, каким образом будет осуществляться соединение - синхронно (adConnectUnspecified) или асинхронно(adAsyncConnect).

Таблица 1.1. Вид строки соединения, передаваемой в метод Open(...) объекта Connection для различных OLE DB поставщиков (MSDN)

Источник данных

Строка соединения OLE DB

Microsoft® Access

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=physical path to .mdb file

Microsoft SQL Server

Provider=SQLOLEDB.1;Data Source=path to database on server

Oracle

Provider=MSDAORA.1;Data Source=path to database on server

Microsoft Indexing Service

Provider=MSIDXS.1;Data Source=path to file

Таблица 1.2. Вид строки соединения, передаваемой в метод Open(...) объекта Connection для различных ODBC поставщиков данных (MSDN)

Источник данных

Строка соединения ODBC

Microsoft Access

Driver={Microsoft Access Driver (*.mdb)};DBQ=physical path to .mdb file

SQL Server

DRIVER={SQL Server};SERVER=path to server

Oracle

DRIVER={Microsoft ODBC for Oracle};SERVER=path to server

Microsoft Excel

Driver={Microsoft Excel Driver (*.xls)};DBQ=physical path to .xls file; DriverID=278

Microsoft Excel 97

Driver={Microsoft Excel Driver (*.xls)};DBQ=physical path to .xls file;DriverID=790

Paradox

Driver={Microsoft Paradox Driver (*.db)};DBQ=physical path to .db file;DriverID=26

Text

Driver={Microsoft Text Driver (*.txt;*.csv)};DefaultDir=physical path to .txt file

Microsoft Visual FoxPro® (with a database container)

Driver={Microsoft Visual FoxPro Driver};SourceType=DBC;SourceDb=physical path to .dbc file

Microsoft Visual FoxPro (without a database container)

Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDb=physical path to .dbf file

Следующий пример показывает установку соединения с базой данных pubs, входящей в стандартный пакет поставки MS SQL Server 7.0 с помощью OLE DB поставщика:

_ConnectionPtr pConn = NULL;

_bstr_t strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=pubs";

try

{

pConn.CreateInstance(__uuidof(Connection));

pConn->Open(strConn,"sa","",adConnectUnspecified);

}

catch(_com_error e)

{

//Обработка ошибок соединения

}

Примечание:

Исключения в ADO. Для обработки исключений ADO необходимо обеспечить блок catch для объекта _com_error. Этот класс используется для возврата ошибок из классов, сгенерированных директивой #import. Класс _com_error инкапсулирует генерируемые значения HRESULT и любые объекты IErrorInfo, сгенерированные поставщиком OLE DB.

Пример обработчиков исключений ADO:

void PrintComError(_com_error &e)

{

_bstr_t bstrSource(e.Source());

_bstr_t bstrDescription(e.Description());

// Print COM errors.

printf("Error ");

printf(" Code = %08lx ", e.Error());

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5160
Авторов
на СтудИзбе
439
Средний доход
с одного платного файла
Обучение Подробнее