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


 

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

48680. Цифровые системы передачи непрерывных сообщений. Методические указания 488 KB
  Основная задача курсовой работы закрепление навыков расчёта характеристик системы передачи непрерывных сообщений цифровыми сигналами. Содержание работы Исходными данными для выполнения работы являются: 1 статистические характеристики сообщения; 2 допустимое значение относительной среднеквадратичной ошибки искажений сообщения при его преобразовании в цифровую форму и действии помех; 3 вид модуляции сигнала во второй ступени. С учётом заданного вида модуляции сигнала определить его параметры характеризующие форму и требуемое...
48681. Исследование характеристик линейных электрических цепей 2.58 MB
  Задание к курсовой работе Нормирование параметров и переменных цепи Определение передаточной функции цепи Hs Расчет частотных характеристик цепи Hj Определение переходной h1t и импульсной ht характеристик Вычисление реакции цепи при воздействии одиночного импульса на входе Определение спектральных характеристик одиночного импульса воздействия Вычисление спектра реакции при одиночном импульсе на входе Определение спектра периодического входного сигнала Приближенный расчет реакции при...
48682. Численное моделирование и анализ переходных процессов в электрической цепи 576 KB
  В начальный момент времени ключ находится в положении При этом цепь разомкнута, напряжение на конденсаторе и ток в катушке равны нулю (U = 0, I = 0). Происходит первое переключение ключа (ключ мгновенно переводится в положение 2). При этом происходит заряд конденсатора, меняются значения U и I.
48684. Основы теории цепей 379 KB
  Содержание расчетно-пояснительной записки: таблица исходных данных; электрическая схема фильтра системы уравнений цепи; комплексная функция передачи; карта полюсов и нулей; АЧХ и ФЧХ и импульсные характеристики. С помощью метода узловых напряжений составляется система уравнения цепи в математической и скалярной форме.
48685. Проектирование электрической сети для электроснабжения потребителей целлюлозно-бумажной промышленности 1.33 MB
  В условиях эксплуатации баланс мощности составляется на каждый час суток(диспетчерский график нагрузки), и на каждый месяц следующего квартала. При проектировании электрической сети баланс мощности составляется для определения суммарного необходимого ввода мощности на электростанциях и обмена потоками мощностей с энергосистемой.
48686. Организация пассажирского движения 988.5 KB
  Для каждой категории поездов необходимо установить число и продолжительность стоянок по техническим надобностям смены локомотивов и локомотивных бригад технического осмотра составов снабжения топливом водой а также для посадки и высадки пассажиров или погрузки выгрузки багажа и почты. Общим условием рациональной технологии обработки всех поездов является выполнение вспомогательных и подготовительных операций до их прибытия на станцию на основе предварительной информации о наличии свободных мест количестве багажа и почты...
48688. Исследование и анализ линейных динамических цепей 423.5 KB
  Полоса частот, в которой ослабление мало, называется полосой пропускания. Полоса частот, в которой ослабление велико, называется полосой непропускания (задерживания). Между этими полосами находится переходная область.