69279

Драйвер ODBC. Підключення до потоку даних. Запит даних

Лекция

Информатика, кибернетика и программирование

Система управління базами даних (DBMS — Database Management System). DBMS є програмним забезпеченням, що надає доступ до структурованих даних і забезпечує можливість маніпулювання ними. Прикладами найбільш популярних DBMS є Microsoft Access, Microsoft SQL Server...

Украинкский

2014-10-02

50 KB

1 чел.

Лекція № 21

Тема: Драйвер ODBC. Підключення до потоку даних. Запит даних.

План

  1.  Драйвер ODBC
  2.  Підключення до потоку даних
  3.  Запит даних

Драйвер ODBC

Система управління базами даних (DBMSDatabase Management System). DBMS є програмним забезпеченням, що надає доступ до структурованих даних і забезпечує можливість маніпулювання ними. Прикладами найбільш популярних DBMS є Microsoft Access, Microsoft SQL Server, Oracle Server і Sybase SQL Server. Більшість DBMS (включаючи всі вищезазначені бази даних) підтримують інтерфейс SQL. Зверніть увагу, всі демонстраційні додатки розділу були перевірені як на Microsoft Access, так і на Microsoft SQL Server. Проте, початковий код всіх прикладів і всі файли баз даних Microsoft Access цій і інших розділів, присвячених роботі з базами даних, знаходяться на Web-сайті даної книги.

- SDK ODBC. Комплект розробника програмного забезпечення (SDKSoftware Development Kit). ODBC є інтерфейсом прикладних програм (APIApplication Programming Interface), використовуваним додатками баз даних для доступу до служб ODBC, що забезпечують, наприклад, взаємодію з тими DBMS, драйвери ODBC яких встановлені в системі. SDK ODBC використовується також при розробці драйверів ODBC, але розробка драйверів ODBC— це не найпростіше завдання, опис якого виходить за прибудови цієї книги.

- Драйвер ODBC (ODBC Driver). Як вже було сказано, драйвером ODBC є компонент, який, фактично, взаємодіє з DBMS, коли диспетчер драйверів ODBC звертається до нього від імені клієнта. Вся інформація або будь-яка відповідь, передана назад клієнтові, також проходить через диспетчер драйверів ODBC. Щоб клієнт міг скористатися певною DBMS за допомогою ODBC йому необхідний відповідний драйвер ODBC, призначений саме для цієї DBMS. Звернете увагу, в цьому розділі мається на увазі, що мова йде про розробці додатку, що використовує драйвер ODBC, а не про розробку самого драйвера ODBC.

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

Перш ніж продовжити виклад, дозвольте зробити одне дуже важливе зауваження. Початкуючі розробники, побачивши ту, що відноситься до SQL частина цього визначення ODBC, можуть подумати, що ODBC застосовний тільки до тих DBMS, які використовують SQL. Насправді функції API ODBC забезпечують взаємодію за допомогою синтаксису SQL з будь-якими форматами даних, для яких існує драйвер ODBC. Яскравим прикладом цього служить текст ASCII. Припустимо, що дані зберігаються в текстовому форматі. Для доступу і управління такими даними зазвичай доводиться створювати свої власні функції. Проте, оскільки корпорація Microsoft надає (безкоштовно !) спеціальний драйвер ODBC для текстових файлів, можна скористатися ODBC і написати операторів SQL, які працюватимуть з даними цього файлу точно так, як і якби вони були розміщені в такій справжньою DBMS, як SQL Server або Oracle.

Реалізація ODBC

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

- Настройка ODBC.

- Підключення до джерела даних.

- Запит даних і джерело даних.

- Підготовка і виконання запитів SQL.

- Отримання даних.

- Відключення від джерела даних.

Підключення до джерела даних

Як тільки утиліта ODBC Data Source Administrator завершить настройку DSN, до вказаної в нім бази даних можна буде звернутися за допомогою функцій API ODBC. Першим етапом програмного доступу до даним ODBC є підключення до джерела даних. Для цього знадобиться декілька викликів функцій. Щоб підключитися до джерела даних необхідно зробити наступні дії.

1. Ініціалізуйте ODBC і отримайте унікальний дескриптор середовища (unique environment handle) або henv. Цей дескриптор унікально ідентифікує потік, використовуючий ODBC. Щоб отримати дескриптор для поточного потоку, викличте функцію SQLAllocHandle.

Як можна відмітити в приведеному нижче фрагменті коду, додаток спочатку оголошує змінну henv типу SQLHENV, а потім викликає функцію SQLAllocHandle, передавши їй як аргумент адреса тільки що оголошеної локальної змінної henv.

SQLHENV henv;

SQLRETURN re = SQLAllocHandle(SQL_HANDLE_ENV

SQL_NULL_HANDLE

shenv);

2. Отримавши дескриптор середовища, слід встановити версію ODBC, з якою сумісний додаток. Для цього застосовується функція SQLSetEnvAttr. При виклику цієї функції з додатку їй передають константу SQL_ATTR_ODBC_VERSXON, щоб вказати, що мова йде про підтримуваною версією ODBC. У приведеному нижче примі ре їй передається також константа SQL_OV_ODBC3, вказуюча, що додаток підтримує ODBC версії 3.0;

SQLSetEnvAttr(henv

SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_INTEGER};

3. Перш ніж додаток зможе підключитися до джерела даних, воно повинне отримати від ODBC дескриптор підключення до бази даних (database connection handle) або hdbc. Для цього застосовується функція SQLAllocHandle, якою передають як перший аргумент константу SQL HANDLE HDBC. Другим аргументом повинен бути реальний дескриптор henv, отриманий на етапі 1. Третій і останній аргумент— покажчик на змінну типу SQLHDBC. Приведений нижче фрагмент коди демонструє стандартне звернення до функції SQLAllocHandle, що дозволяє отримати дескриптор бази даних (database handle):

SQLHDBC hdbc;

SQLRET0RN re = SQLAllocHandle(SQL_HANDLE_ENV henv &hdbc);

4. Отримавши дескриптор hdbc, можна, нарешті, підключитися до джерела даних, використавши будь-яку з трьох функцій ODBC: SQLConnect, SQLDriverConnect або SQLBrowseConnect.

•Функція SQLConnect— це найпростіший спосіб підключення до джерела даних. Їй досить передати DSN, ідентифікатор користувача і пароль для підключення до джерела даних ODBC.

•Функція SQLDriverConnect— альтернативний варіант для драйверів ODBC. Вона вимагає передачі докладнішій інформації, ніж функція SQLConnect.

•функція SQLBrowseConnect— це засіб підключення до джерела даних, що володіє найбільшими можливостями. За допомогою одного або декількох звернень до функції SQLBrowseConnect (у циклі) можна запитати і отримати всю інформацію, необхідну для підключення до джерела даних. Для забезпечення такого підходу функція SQLBrowseConnect повертає значення SQL_NEEDS_DATA до тих пір, поки додаток не надасть всю інформацію, необхідну для підключення до джерела даних, і лише тоді вона поверне значення SQL_SUCCESS.

Щоб зосередитися на важливіших темах ODBC, тут, і в подальших демонстраційних застосуваннях, використовуватиметься найпростіша функція — SQLConnect. Нижче приведений приклад використання функції SQLConnect для підключення до джерела даних на ім'я VCNET Bible. Звернете увагу, константа SQL_NTS повідомляє ODBC про те, що попередній переданий аргумент є рядком із завершуючим нульовим символом.

SQLRETURN re = SQLConnect(hdbc

(SQLCHAR*)"VCNET Bible", SQL_NTS

(SQLCHAR*)"", SQL_NTS, (SQLCHAR*) "", SQL_NTS);

Підключившись до DSN за допомогою однієї з цих функцій, можна перейти до наступного логічного кроку — запиту даних.

Запит даних і джерело даних

Однією з найбільш істотних особливостей ODBC є те, що він дозволяє запитати інформацію про можливості драйвера ODBC за допомогою функцій SQLGetFunctions, SQLGetlnfojiSQLGetTypelnfo.

- Функція SQLGetFunctions дозволяє запитати драйвер ODBC про те, чи підтримує він певні функції або групи функцій. Як аргументи цієї функції необхідно передати дескриптор hdbc і числове значення, що ідентифікує певну функцію або групу функцій ODBC. Ці значення визначені у файлі заголовка SQLEXT.Н, який встановлюється разом з Microsoft SQL Server SDK ODBC або Visual Studio .NET.

Приведений нижче фрагмент коди з'ясовує, чи доступні функції SQLTables і SQLColumns для DBMS, що асоціюється з вказаним DSN:

SQLUSMALLINT bSQLTablesFunctionExists;

SQLUSMALLINT bSQLColumnsFunctionExists;

SQLGetFunctions(hdbc

SQL_API_SQLTABLES

&bSQLTablesFunctionExists); SQLGetFunctions(hdbc

SQL_API_SQLTABLES

& bSQLColumnsFunctionExists);

if (bSQLTablesFunctionExists

&& bSQLColumnsFunctionExists)

{

// Обидві функції існують

}

Функція SQLGetFunctions дуже корисна, оскільки дозволяє додатку заздалегідь упевнитися, чи підтримує драйвер ту функцію, виклик якої необхідно здійснити. Виникає резонне питання: "Чи не означає це, що для кожного виклику функції доведеться створювати додатковий код перевірки її наявності?" Насправді це залежить від вживаного драйвера ODBC і того, що саме необхідно зробити з джерелом даних. Як вже було сказано в розділі, присвяченому рівням узгодження, якщо мова йде про функціях базового рівня узгодження або якщо набір функцій даного драйвера добре відомий, то необхідності в перевірці немає. Але якщо створюваний код повинен працювати зі всіма драйверами ODBC, а використовувані функції не відносяться до тих, які зобов'язані бути реалізовані кожним з них, то функція SQLGetFunctions в цьому випадку просто неоцінима.

- Функція SQLGetlnfo повертає інформацію про драйвер ODBC і його можливостях. Наприклад, з її допомогою можна з'ясувати версію драйвера ODBC, його назву, а також його рівні узгодження API і SQL.

- Функція SQLGetTypelnf про повертає інформацію про підтримувані джерелом дані типи даних SQL, а також деяку іншу інформацію про типи даних. Складність використання функції полягає в тому, що вона не повертає значення безпосередньо. Драйвер повертає інформацію у форматі результуючого набору даних (result set) аналогічно тому, як він повертає будь-які дані з ис-. точника даних. Отже, отримані при виклику цієї функції дані неоЯ ходимо обробити як звичайний повертаний результуючий набір даних. ОЯ робітка отриманих в результаті запиту даних розглядається в наступному раз! справі, а також в демонстраційних застосуваннях, приведених далі.


 

А также другие работы, которые могут Вас заинтересовать

75351. Англия в V-XI веках 62 KB
  Завоевание Британии англосаксами После того как римские войска в начале V в. были выведены из Британии населённой бриттами кельтами на её территорию стали массами вторгаться германские племена саксованглов и ютов жившие между Эльбой и Рейном область расселения саксов и на Ютландском полуострове область расселения англов и ютов. Англосаксонское завоевание Британии продолжалось свыше 150 лет и закончилось в основном в начале VII в. Столь длительный характер завоевания объясняется прежде всего тем что кельтское население Британии...
75352. Германия в X-XI веках 42 KB
  В состав Германии входили следующие герцогства из которых каждое было заселено определённым германским племенем так называемые племенные герцогства: Саксония и Тюрингия между притоками Рейна и Эльбой; Франкония по реке Майну и среднему течению Рейна; Швабия по верхнему течению Дуная и Рейна а также его притока Неккара и Бавария по среднему течению Дуная я его притоков к востоку от реки Лех. К...
75353. Крестовые походы. Их причины, предпосылки, социальный состав и цели участников. Первый крестовый поход 61.5 KB
  Папа указал и на земные выгоды ожидающие крестоносцев на Востоке. Не ожидая подхода основных сил рыцарейкрестоносцев бедняки устремились вперед. Путь крестоносцев через византийские владения сопровождался повальным грабежом местного населения. Император Алексей 1 опасаясь нашествия крестоносцев которых утонченная верхушка византийского общества не без основания считала варварами старался воспрепятствовать объединению их ополчений в Константинополе.
75354. Особенности социально-экономического и политического развития Италии в XI-XIII вв. Причины незавершенности политической централизации Италии 44 KB
  Особенности социально-экономического и политического развития Италии в XI-XIII вв. Причины незавершенности политической централизации Италии. Государственная самостоятельность которую получили многие города Северной и Центральной Италии к концу XII в. коммуны с консульским правлением сложились в десятках городов Северной и Центральной Италии в Падуе Ферраре Кремоне Генуе Пизе Сьене Болонье и многих других.
75355. Особенности социально-экономического и политического развития Италии в XIII-XV веках 61 KB
  Завоевание Южной Италии и Сицилии норманнами. многие города Южной Италии и Сицилии добились от феодальных сеньоров вольностей участия представителей горожан в органах судебно-административной власти. Южной Италии и Сицилии норманнами норманнский правитель рожер II образовал Сицилийское королевство объединив в нем Южную Италию и Сицилию При норманнах в Южной Италии и на Сицилии завершился процесс складывания феодальных отношений.
75356. Конкурентоспроможність потенціалу підприємства 312 KB
  Конкурентоспроможність потенціалу підприємства та її рівні. Класифікація методів оцінки конкурентоспроможності потенціалу підприємства. Прикладні моделі оцінки конкурентоспроможності потенціалу підприємства. Методи оцінки конкурентоспроможності потенціалу підприємства в зарубіжній практиці.
75357. Структура і графоаналітична модель потенціалу підприємства 119 KB
  Під структурою системи, якою є потенціал підприємства, розуміють мережу найбільш суттєвих, стійких (інваріантних) звязків між елементами. На думку М.Ф. Овчинникова, структура представляє собою «інваріантний» аспект системи. В.И.Кремянський також звертає увагу на те, що структура виражає не усю сукупність звязків обєкту
75358. ФОРМУВАННЯ ПОТЕНЦІАЛУ ПІДПРИЄМСТВА 374.5 KB
  Методичні та організаційноекономічні засади формування потенціалу підприємств Формування потенціалу підприємства це процес ідентифікації та створення спектру підприємницьких можливостей його структуризації та побудови певних організаційних форм задля стабільного розвитку та ефективного відтворення. Розглянемо більш детально що представляє собою процес формування потенціалу підприємства. Властивості економічної системи Властивості економічних систем дозволяють виокремити загальні...
75359. Особливості формування виробничого потенціалу підприємства 86.5 KB
  Особливості формування виробничого потенціалу пва 1.Загальні підходи щодо формування потенціалу підприємства Процес формування потенціалу підприємства є одним з напрямків його економічної стратегії і передбачає створення й організацію системи ресурсів і компетенцій таким чином щоб результат їхньої взаємодії був фактором успіху в досягненні стратегічних тактичних і оперативних цілей діяльності підприємства. Системний підхід є одним з основних у процесі формування потенціалу підприємства. Потім визначаються параметри входу: які потрібні...