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) аналогічно тому, як він повертає будь-які дані з ис-. точника даних. Отже, отримані при виклику цієї функції дані неоЯ ходимо обробити як звичайний повертаний результуючий набір даних. ОЯ робітка отриманих в результаті запиту даних розглядається в наступному раз! справі, а також в демонстраційних застосуваннях, приведених далі.


 

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

11402. Работа со сводными таблицами 37 KB
  Задание 6. Работа со сводными таблицами. Создание Загрузите с диска электронную таблицу содержащую перечень основных средств. На основании данных содержащихся в рабочем листе с именем ldquo;Амортизацияrdquo; сформируйт...
11403. Работа со справочниками 331.5 KB
  Задание 4. Работа со справочниками. Справочник Откройте новую рабочую книгу. Создайте рабочий лист с именем Нормы содержащий следующую справочную таблицу: Примечание: при формировании справочны...
11404. Работа со списками данных 57.5 KB
  Задание 5. Работа со списками данных. Редактирование списков данных В справочник норм амортизации произвести следующую корректировку данных...
11405. Изучение жанра сказки на уроках литературы в специальной (коррекционной) школе III-IV вида 25.23 KB
  Лабораторное занятие № 5 Изучение жанра сказки на уроках литературы в специальной коррекционной школе IIIIV вида Задания для самостоятельной работы обязательной формы: 1.Составьте конспект урока по выбранной вами теме: 1 Разработайте конспект вступит
11406. Чтение и изучение фольклорных жанров на уроках литературы в специальной (коррекционной) школе III-IV вида (на материале пословиц и поговорок, былины) 18.31 KB
  Лабораторное занятие № 6 Чтение и изучение фольклорных жанров на уроках литературы в специальной коррекционной школе IIIIV вида на материале пословиц и поговорок былины. Задания для подготовки Выявите по словарям литературоведческих терминов значение понятий
11407. УСТНОЕ НАРОДНОЕ ТВОРЧЕСТВО БЫЛИНЫ 53 KB
  УСТНОЕ НАРОДНОЕ ТВОРЧЕСТВО БЫЛИНЫ Занятия по фольклору в седьмом классе начинаются с рассказов учащихся об известных им жанрах устного народного творчества с пересказов полюбившихся им сказок пословиц поговорок загадок. Они могут быть проведены в виде св...
11408. УСТНОЕ НАРОДНОЕ ТВОРЧЕСТВО Обрядовый фольклор 58 KB
  УСТНОЕ НАРОДНОЕ ТВОРЧЕСТВО Обрядовый фольклор 2 часа Урок 8 Обряды и обрядовый фольклор. Произведения календарнообрядового цикла: колядки веснянки масленичные летние песни осенние обрядовые песни. Эстетическое значение обрядового фольклора
11409. ЦИКЛИЧЕСКИЕ ВЫЧИСЛИТЕЛЬНЫЕ ПРОЦЕССЫ 71.5 KB
  Лабораторная работа ЦИКЛИЧЕСКИЕ ВЫЧИСЛИТЕЛЬНЫЕ ПРОЦЕССЫ Цель работы; ознакомление и приобретение навыков алгоритмизации задач методом структурной декомпозиции использования основных арифметикологических и управляющих операторов языка С/С и отладки пр...