Смекни!
smekni.com

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

3.1.5 Послідовність дій додатка-клієнта для реалізації доступу до джерела даних

З'єднання із джерелом даних

Для безпосереднього підключення до БД ODBC API надає такі три функції: SQLConnect - з'єднання з джерелом даних по DSN, імені й паролю користувача; SQLDriverConnect - з'єднання з джерелом даних по зазначеному рядку з'єднання або за допомогою відображуваного діалогу для інтерактивного уведення параметрів з'єднання; SQLBrowseConnect - з'єднання з джерелом даних із попереднім послідовним запитом атрибутів з'єднання.

Функція SQLConnect має такий формальний опис:

SQLRETURN SQLConnect(

SQLHDBC ConnectionHandle, - вказує дескриптор з'єднання;

SQLCHAR * ServerName, - ім'я джерела даних;

SQLSMALLINT NameLength1, - визначають довжину

параметрів;

SQLCHAR * UserName, - описують ім'я користувача;

SQLSMALLINT NameLength2, - визначають довжину

параметрів;

SQLCHAR * Authentication, - описують пароль;

SQLSMALLINT NameLength3); - визначають довжину параметрів.

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

SQLRETURN SQLDriverConnect(;

SQLHDBC ConnectionHandle, - вказує дескриптор

з'єднання;

SQLHWND WindowHandle, - це покажчик батьківського вікна або NULL;

SQLCHAR * InConnectionString, - задає повністю або

частково рядок з'єднання або порожній рядок;

SQLSMALLINT StringLength1, - задає довжину в байтах;

SQLCHAR * OutConnectionString, - це покажчик на буфер,

у якому після успішного підключення до джерела даних повертається повний рядок з'єднання;

SQLSMALLINT BufferLength, - задається розмір буфера;

SQLSMALLINT *StringLength2Ptr, - повертає покажчик на буфер, в якому розміщується загальне число символів повного рядка з'єднання;

SQLUSMALLINT DriverCompletion); - це прапорець, що вказує, чи буде менеджер драйверів і драйвер пропонувати діалоги для формування завершеного рядка з'єднання.

Останній параметр визначається такими значеннями:

SQL_DRIVER_PROMPT - підказка пропонується й ураховується навіть у тому випадку, якщо значення атрибута вже задано в рядку з'єднання. Спочатку відображається вікно з доступними джерелами даних (для атрибута DSN);

SQL_DRIVER_COMPLETE - підказка пропонується тільки в тому випадку, якщо необхідний для підключення атрибут не заданий у рядку з'єднання;

SQL_DRIVER_COMPLETE_REQUIRED - підказка пропонується тільки в тому випадку, якщо необхідний для підключення атрибут не заданий у рядку з'єднання й при цьому запитуються тільки необхідні значення атрибутів;

SQL_DRIVER_NOPROMPT - підказки не пропонуються.

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

DSN - ім'я джерела даних (функція SQLDataSources повертає список доступних джерел даних);

FILEDSN - ім'я .dsn файлу, з якого буде прочитаний рядок з'єднання;

DRIVER - опис драйвера (список доступних драйверів повертається функцією

SQLDrivers);

UID - ідентифікатор користувача;

PWD - для зазначеного ідентифікатора користувача або при відсутності пароля порожній рядок (PWD=;);

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

Ключові слова DSN й FILEDSN є в рядку з'єднання взаємовиключними: буде використане перше із зазначених. З іншими ключовими словами FILEDSN не є взаємовиключним: пріоритет має значення, зазначене безпосередньо в рядку стану. Очевидно, що значення ключового слова PWD не зберігається в .dsn файлі.

Функція SQLBrowseConnect реалізує ітераційний метод запиту значень атрибутів, необхідних для підключення до БД, повертаючи щоразу код відповіді SQL_NEED_DATA й ідентифікатор чергового запитуваного атрибута. Після визначення значень всіх необхідних атрибутів функція встановлює з'єднання з БД і при успішному завершенні операції повертає код відповіді, такий, що дорівнює SQL_SUCCESS або SQL_SUCCESS_WITH_INFO.

Функція SQLBrowseConnect має такий формальний опис:

SQLRETURN SQLBrowseConnect(;

SQLHDBC ConnectionHandle;

SQLCHAR * InConnectionString, - описує рядок

підключення або її частину, зазначену при попередньому виклику функції; SQLSMALLINT StringLength1, - задає довжину буфера;

SQLCHAR * OutConnectionString, - визначає покажчик на

буфер, що містить інформацію про відсутній атрибут рядка з'єднання;

SQLSMALLINT BufferLength, - задає довжину буфера;

SQLSMALLINT *StringLength2Ptr); - указує загальне число

байтів, що повинне бути повернуте в буфері.

Пул з'єднань

Організація пула з'єднань дозволяє додатку вибирати з'єднання з пула і без необхідності переустановлювати їх для кожного використання.

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

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

При роботі з пулом з'єднань використаний драйвер ODBC повинен бути повністю потокозахищеним, що дозволить одночасно виконувати різні виклики з різних потоків (наприклад, виконати приєднання в одному потоці, використати з'єднання в іншому потоці, а від'єднання виконати в третьому потоці).

Пул з'єднань управляється менеджером драйверів. З'єднання вибирається з пула при виклику додатком функції SQLConnect або функції SQLDriverConnect, а повертається в пул при виконанні функції SQLDisconnect. Розмір пула змінюється динамічно: якщо з'єднання не було використано протягом певного періоду часу, то воно віддаляється з пула.

Для використання додатком пула з'єднань необхідно:

для включення режиму пула з'єднань викликати функцію SQLSetEnvAttr з атрибутом середовища SQL_ATTR_CONNECTION_POOLING, такими, що дорівнює значенню SQL_CP_ONE_PER_DRIVER або значенню SQL_CP_ONE_PER_HENV. При виклику функції SQLSetEnvAttr дескриптор середовища вказується таким, що дорівнює значенню NULL, що визначає атрибут SQL_ATTR_CONNECTION_POOLING як атрибут рівня процесу. Значення SQL_CP_ONE_PER_DRIVER визначає, що окремий пул з'єднань підтримується для кожного драйвера. При необхідності мати один пул для різних драйверів указується значення SQL_CP_ONE_PER_HENV (окремий пул з'єднань підтримується для кожного середовища).

Створити дескриптор з'єднання, викликавши функцію SQLAllocHandle зі значенням параметра типу дескриптора, таким, що дорівнює SQL_HANDLE_DBC. Менеджер драйверів буде шукати існуюче розподілене середовище з відповідними атрибутами середовища (при знаходженні необхідного середовища воно повертається додатку й менеджер драйверів збільшує значення лічильника на 1). Якщо такого середовища немає, то менеджер драйверів створює його й установлює значення лічильника таким, що дорівнює 1.

Для одержання з'єднання з пула викликати функцію SQLConnect або SQLDriverConnect. Менеджер драйверів використовує значення параметрів і значення атрибутів з'єднання для визначення необхідного з'єднання з пула з'єднань. При цьому враховується значення атрибута SQL_ATTR_CP_MATCH (відповідність необхідного з'єднання з'єднанню з пула).

Для розриву з'єднання викликати функцію SQLDisconnect. При цьому з'єднання повертається назад у пул і робиться доступним для подальшого використання.

3.2 Об'єктна модель OLE DB

3.2.1 Основні поняття

OLE DB являє собою набір COM-інтерфейсів (Component Object Model), які надають клієнту-додатку-клієнтові уніфікований доступ до різних джерел даних. Можна сказати, що OLE DB - це метод доступу до будь-яких даних через стандартні COM-інтерфейси, поза залежністю від типу даних і місця їх розміщення. Як дані можуть виступати БД, прості документи, таблиці Excel і будь-які інші джерела даних. На відміну від доступу, наданого за допомогою драйверів OBDC, OLE DB дозволяє реалізовувати доступ до джерел даних, як із застосуванням мови SQL (до SQL-серверів), так і до будь-яких інших довільних джерел даних.

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

Через те, що архітектура OLE DB заснована на COM, те механізм створення результуючих наборів складається з послідовностей кроків типу: 1. створення об'єкта → 2. запит покажчика на інтерфейс створеного об'єкта → 3. виклик методу інтерфейсу.

Аналогічно комплексу дій, якому слідують після створення результуючого набору при застосуванні технології ODBC - виконанню зв'язування, у технології OLE DB використовується механізм аксесорів. Аксесори описують, яким чином дані записуються в область пам'яті споживача даних, установлюючи адресну відповідність між областю пам'яті в буфері споживача даних і стовпцями даних у результуючому наборі. Іноді такий набір зв'язків називають картою стовпців (column map).

Об'єктна модель OLE DB

Специфікація OLE DB описує набір інтерфейсів, реалізованих об'єктами OLE DB. Кожен об'єктний тип визначений як набір інтерфейсів. Специфікація OLE DB визначає набір інтерфейсів базового рівня, які повинні реалізовуватися будь-якими OLE DB провайдерами. У базову модель OLE DB входять такі об'єкти:

· об'єкт DataSource (джерело даних), використовується для з'єднання з джерелом даних і створення одного або декількох сеансів. Цей об'єкт управляє з'єднанням, використовує інформацію про повноваження й аутентифікацію користувача;