Рисунок 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. При цьому формується дескриптор, названий явно розміщеним дескриптором.
Явно розміщені дескриптори також асоціюються з дескриптором з'єднання: вони залишаються доступними доти, поки додаток має з'єднання з БД. Оскільки явно розміщені дескриптори асоціюються з дескриптором з'єднання, то додаток може асоціювати такі дескриптори з декількома дескрипторами операторів для даного з'єднання. Неявно розміщений дескриптор додатка не може бути асоційований більш ніж з одним дескриптором оператора.