Смекни!
smekni.com

Організація баз даних та знань (стр. 16 из 26)

Рисунок 3.1 – Архітектура ODBC

Основне призначення менеджера драйверів - завантаження драйвера, відповідному джерелу даних, що підключається, і інкапсуляція взаємодії з різними типами джерел даних за допомогою застосування різних ODBC-драйверів.

ODBC-драйвери, приймаючи виклики функцій, взаємодіють із додатком-клієнтом, виконуючи такі завдання:

· керування комунікаційними протоколами між додатком-клієнтом і джерелом даних;

· керування запитами до СКБД;

· виконання передачі даних від додатка-клієнта в СКБД і з БД у додаток-клієнт;

· повернення додатку-клієнтові стандартної інформації про виконаний виклик

ODBC-функції у вигляді коду повернення;

· підтримує роботу з курсорами й управляє транзакціями.

Додаток-клієнт одночасно може встановлювати з'єднання з декількома різними джерелами даних, використовуючи різні ODBC-драйвери, а також кілька з'єднань із тим самим джерелом даних, використовуючи той самий ODBC-драйвер.

1.3.3 Співвідношення стандарту ODBC і стандарту інтерфейсу рівня викликів (CLI)

Як ми вже відзначали вище, відкритий інтерфейс доступу до БД фірми Microsoft заснований на таких стандартах:

специфікація X/Open CAE (Specification "Data Management: SQL Call-Level Interface

(CLI)"); специфікація ISO /IEC 9075-3:1995 (E) (Call-Level Interface (SQL/CLI)).

У цей час фірма Microsoft підтримує версію 3.x ODBC API. Додатки, написані на основі специфікації X/Open й ISO CLI, будуть правильно працювати з ODBC-драйверами версії 3.x або драйверами "погодженого стандарту" у тому випадку, якщо вони компілюються із заголовними файлами ODBC версії 3.x і лінкуються з ODBC 3.x бібліотеками, а доступ до ODBC-драйвера одержують через менеджер драйверів ODBC 3.x. Аналогічно, що й самі драйвери 3.x, написані на основі специфікації X/Open й ISO CLI, будуть правильно працювати з додатками при дотриманні цих самих умов.

Драйвер ODBC 3.x завжди підтримує всі можливості, які використовуються додатком "погодженого стандарту", а додаток ODBC 3, що використовує тільки можливості, надані ISO CLI, і обов'язкові засоби, описувані X/Open CLI, завжди буде працювати із драйвером "погодженого стандарту".

На додаток до інтерфейсу, специфікованому у стандартах ISO/IEC й X/Open CLI, ODBC реалізує такі можливості:

· добування декількох рядків (блокова вибірка) за один виклик функції;

· зв'язування з масивом параметрів;

· підтримка закладок, включаючи вибірку за допомогою закладки, закладки змінної довжини, блокове відновлення й видалення за допомогою відзначених операцій над непослідовними рядками;

· порядкове зв'язування (row-wise binding);

· зв'язування зі зсувом (binding offsets);

· підтримка пакетів SQL-операторів як у збережених процедурах, так й у вигляді послідовності окремих SQL-операторів, виконуваних при виклику функцій SQLExecute й SQLExecDirect;

· визначення точного або приблизного числа рядків курсору;

· застосування операції позиціонованого відновлення й видалення й пакетні видалення й відновлень із використанням функції SQLSetPos;

· підтримка функцій каталогу, що дозволяють одержувати інформацію зі схеми БД

(системних таблиць);

· бібліотеки перетворення для кодових сторінок;

· асинхронне виконання;

· підтримка збережених процедур, включаючи escape-послідовності, механізм зв'язування вихідних параметрів, функції каталогу;

· більше просунуті можливості з'єднання, що включають підтримку атрибутів з'єднання й перегляду атрибутів.

1.3.4 Функції ODBC API

Всі функції ODBC API умовно можна поділити на чотири групи:

· основні функції ODBC, що забезпечують взаємодію з джерелом даних;

· функції установки (setup DLL);

· функції інсталяції (installer DLL) ODBC і джерел даних;

· функції перетворення даних (translation DLL), які викликаються при передачі даних від драйвера до джерела даних або назад.

Оголошення всіх функцій і використовуваних ними типів даних утримуються в заголовних файлах. Група основних функцій ODBC API розбита на три рівні: функції ядра ODBC; функції 1 рівня; функції 2 рівня.

Кожен ODBC-драйвер специфікується як драйвер, що підтримує певний рівень функцій ODBC API.

У таблиці 3.1 поданий список основних функцій ODBC API.

Група функцій установки (setup DLL) поєднує функції, призначені для конфігурування драйверів і джерел даних:

· ConfigDriver виконує установку або видалення драйвера;

· ConfigDSN виконує додавання, зміну або видалення джерела даних;

· ConfigTranslator повертає використовувані за замовчуванням опції перетворення.

Таблиця 3.1 –Основні функції ODBC API

Функція Опис
1 2
З'єднання із джерелом даних
SQLAllocHandle Одержує ідентифікатор (дескриптор) середовища, з'єднання або оператора, або дескриптор додатка
SQLConnect З'єднання із джерелом даних по DSN, імені й паролю користувача
SQLDriverConnect З'єднання із джерелом даних по зазначеному рядку з'єднання або за допомогою відображуваного діалогу для інтерактивного уведення

параметрів з'єднання

SQLBrowseConnect Послідовно запитує атрибути з'єднання й установлює допустимі значення атрибута. Після специфікації значення для кожного необхідного атрибута з'єднання функція виконує з'єднання із джерелом даних
Одержання інформації про драйвери й про джерела даних
SQLDataSources Повертає список доступних джерел даних
SQLDrivers

Повертає список установлених

драйверів та їхні атрибути

SQLGetInfo Повертає інформацію про зазначений драйвер й джерело даних

Продовження таблиці 3.1

1 2
SQLGetFunctions Повертає функції, які підтримуються використовуваним драйвером
SQLGetTypeInfo

Повертає інформацію про

підтримувані типи даних

Зміна атрибутів драйверів й одержання інформації про атрибути драйверів
SQLSetConnectAttr Установлює атрибути з'єднання
SQLGetConnectAttr Повертає значення атрибута з'єднання
SQLSetEnvAttr Установлює атрибути середовища
SQLGetEnvAttr Повертає значення атрибута середовища
SQLSetStmtAttr Установлює атрибути оператора
SQLGetStmtAttr

Повертає значення атрибута

оператора

Група функцій інсталяції (installer DLL) поєднує функції, призначені для установки ODBC і конфігурування джерел даних.

Установка ODBC

· SQLConfigDriver завантажує setup DLL для конкретного драйвера;

· SQLGetInstalledDrivers повертає список установлених драйверів;

· SQLInstallDriverEx додає до реєстру дані про драйвер;

· SQLInstallDriverManager повертає каталог, призначений для менеджера драйверів;

· SQLInstallerError повертає інформацію про помилку виконання функції інсталяції;

· SQLInstallTranslatorEx додає до реєстру дані про транслятор;

· SQLRemoveDriver видаляє з реєстру дані про драйвер;

· SQLRemoveDriverManager змінює або видаляє дані про базові компоненти

ODBC з реєстру;

· SQLRemoveTranslator видаляє з реєстру дані про транслятор.

Конфігурування джерел даних:

· SQLConfigDataSource викликає setup DLL для конкретного драйвера;

· SQLCreateDataSource відображає діалог для додавання джерела даних;

· SQLGetConfigMode запитує режим конфігурації, що дозволяє

визначити, де в реєстрі Windows шукати секцію ODBC.INI. ;

· SQLGetPrivateProfileString записує значення до реєстру;

· SQLGetTranslator показує діалог для вибору транслятора;

· SQLManageDataSources відображає діалог для конфігурування драйверів і джерел даних;

· SQLReadFileDSN читає інформацію про DSN з файлу;

· SQLRemoveDefaultDataSource видаляє джерело даних за замовчуванням;

· SQLRemoveDSNFromIni видаляє джерело даних;

· SQLSetConfigMode установлює режим конфігурації, що вказує, де в

реєстрі буде використатися вхід ODBC.INI;

· SQLValidDSN перевіряє правильність і’мя джерела даних;

· SQLWriteDSNToIni додає джерело даних;

· SQLWriteFileDSN записує інформацію про DSN у файл;

· SQLWritePrivateProfileString запитує значення з реєстру Windows.

3.1.4 Схема доступу до джерела даних з використанням ODBC API

Першим кроком при реалізації доступу до джерела даних за допомогою ODBC API без застосування пула з'єднань є створення дескриптора (ідентифікатора) оточення. Після виділення пам’яті під дескриптор оточення додаток повинен викликати функцію SQLSetEnvAttr для завдання значення атрибуту дескриптора оточення SQL_ATTR_ODBC_VERSION..

Після створення дескриптора оточення створюються дескриптори з'єднань. Кожен дескриптор з'єднання формується викликом функції SQLAllocHandle з типом дескриптора, рівним SQL_HANDLE_DBC. Драйвер виділяє пам'ять для зберігання інформації про з'єднання й повертає значення дескриптора з'єднання. Далі для реального з'єднання із джерелом даних викликається функція SQLConnect або функція SQLDriverConnect.

Для виконання SQL-операторів створюються дескриптори операторів. Вони дозволяють одержати доступ до інформації про виконаного оператора, ім'я курсору й атрибути. Дескриптор оператора формується викликом функції SQLAllocHandle зі значенням типу дескриптора, таким що дорівнює SQL_HANDLE_STMT.

При створенні дескриптора оператора драйвер автоматично створює ще чотири дескриптори й записує покажчики на них в атрибути дескриптора оператора

SQL_ATTR_APP_ROW_DESC, SQL_ATTR_APP_PARAM_DESC,

SQL_ATTR_IMP_ROW_DESC й SQL_ATTR_IMP_PARAM_DESC. Ці чотири дескриптори називаються неявно розміщеними дескрипторами.

Для явного розміщення дескриптора додатка варто викликати функцію SQLAllocHandle зі значенням типу дескриптора, таким що дорівнює SQL_HANDLE_DESC. При цьому формується дескриптор, названий явно розміщеним дескриптором.

Явно розміщені дескриптори також асоціюються з дескриптором з'єднання: вони залишаються доступними доти, поки додаток має з'єднання з БД. Оскільки явно розміщені дескриптори асоціюються з дескриптором з'єднання, то додаток може асоціювати такі дескриптори з декількома дескрипторами операторів для даного з'єднання. Неявно розміщений дескриптор додатка не може бути асоційований більш ніж з одним дескриптором оператора.