SQL/CLI: ODBC (Open DataBase Connectivity)
История создания
Если в 1970-80 г.г. фактически каждый разработчик предоставлял пользователю средства разработки приложений с технологией доступа к своим СУБД, то с конца 80-х годов все существенно изменилось. В 1989 году была образована группа SQL Access Group (SAG), объединившая 42 компании, производящие СУБД и инструментальные средства к ним. Основной задачей этой группы является создание спецификаций форматов и протоколов для коммуникаций в системах БД с архитектурой клиент/сервер на основе спецификаций удаленного доступа к БД (Remote Database Access – RDA). Соответствующие стандарты были разработаны – SQL/CLI.
ODBC (Open DataBase Connectivity)
Общие сведения об ODBC
ODBC представляет собой библиотеку, включающую более 50 функций (API), символические имена типов данных и состояния вызовов функций с использованием кодов ошибок. Функции ODBC позволяют прикладной программе обращаться к БД различных типов, используя язык SQL. Реализовано ODBC на основе указателей, поэтому отпадает необходимость использования глобальных данных, характерных для встроенного SQL. Приложение получает доступ к данным через указатели. Такой стиль связывания не нуждается в препроцессоре и, следовательно, дает возможность разрабатывать переносимые приложения. Август 1993 – выход в свет.
Структурная схема доступа к БД через ODBC (три варианта)
Структурная схема доступа к БД через ODBC (первый вариант)
Структурная схема доступа к БД через ODBC (второй вариант)
Структурная схема доступа к БД через ODBC (третий вариант)
Создание источников данных DSN в ODBC
Создание псевдонимов (Alias) источников данных (Data Source Name – DSN) может быть выполнено интерактивно с помощью программы – OdbcAd32.Dll, размещенной в каталоге C:\Windows\System32\. Эта утилита имеет пиктограмму в Панели управления — Администрирование под названием «Источники данных ODBC» и мобильную панель управления (Odbccp.Cpl). Ее примерный размер 37 Кбайт. Источник данных может создаваться как для одного пользователя на странице Пользовательский (User) DSN, так и для всех – на странице Системный (System) DSN.
Хранение настроек ODBC
Сведения об источниках данных (DSN) хранятся в реестре Windows в разделах:
• Для User DSN: HKEY_CURRENT_USER\SOFTWARE\ODBC\ODBC.INI
• Для System DSN: HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI
• Сведения об установленных драйверах хранятся в реестре Windows в разделе: HKEY_LOCAL_MACHINT\SOFTWARE\ODBC\ODBCINST.INI.
ODBC API
• Алгоритм работы через ODBC API
• Обработка ошибок ODBC API
• Уровни соответствия ODBC API
• Преобразование данных в ODBC API
• Основные функции ODBC API
• SQL-расширение ODBC API
• Дополнительные функции ODBC API
Алгоритм работы через ODBC API
ИНИЦИАЛИЗАЦИЯ | |
---|---|
Назначение идентификатора окружения | SQLAllocEnv(phenv) |
Назначение Идентификатора соединения | SQLAllocConnect(henv, phdbc) |
Соединение с сервером базы данных | SQLConnect(hdbc, szDSN,0,szUID,0,szAuthStr,0) |
Назначение идентификатора оператора | SQLAllocStmt(hdbc, phstmt) |
ОБРАБОТКА SQL-операторов | |
---|---|
Выполнение оператора и выборка данных | SQLExecDirect(hstmt,szSqlStr,cbSqlStr) SQLPrepare(hstmt,szSqlStr,cbSqlStr) SQLExecute (hstmt) |
ЗАВЕРШЕНИЕ | |
---|---|
Освобождение идентификатора оператора | SQLFreeStmt(hstmt, fOption) |
Разрыв соединения с сервером | SQLDisconnect(hdbc) |
Освобождение идентификатора соединения | SQLFreeConnect(hdbc) |
Освобождение идентификатора окружения | SQLFreeEnv(henv) |
Обработка ошибок ODBC API
Обработка ошибок ODBC API включает два этапа:
• Определение факта ошибки
Все функции возвращают код возврата (RETCODE), свидетельствующий о правильности выполнения функции ODBC.
• Идентификация сущности ошибки
Для идентификации сущности ошибки в ODBC предусмотрена специальная функция SQLError(), возвращающая в параметре szSqlState статус ошибки SQLSTATE.
КОД ВОЗВРАТА | ЗНАЧЕНИЕ | ОПИСАНИЕ |
SQL_SUCCESS | 0 | Функция выполнена успешно и нет ошибок |
SQL_SUCCESS_WITH_INFO | 1 | Функция выполнена успешно, но есть предупреждение |
SQL NO DATA FOUND | 100 | Все строки результата запроса выбраны |
SQL_ERROR | -1 | Ошибка в выполнении функции, и есть данные об ошибке |
SQL_INVALID_HANDLE | -2 | Один или более идентификаторов используется в качестве параметра, и один из них является недействительным |
SQL_STILL_EXECUTING | 2 | Одна из функций выполняется асинхронно и все еще в работе |
SQL_NEED_DATA | 99 | Для выполнения одного из операторов прикладная программа должна определить не менее одного значения оператора |
Уровни соответствия ODBC API
Уровни соответствия (грамматики SQL) включают в себя следующие:
• Минимальную (Minimum)
• Базовую (Core)
• Расширенную (Extended)
Преобразование данных в ODBC API
• Данные, хранимые в источнике данных, имеют SQL-тип данных (SQL Data Type).
• Каждый ODBC-драйвер преобразует SQL-тип источника данных в соответствующий ODBC-тип (fSqlType).
• Далее, каждому ODBC SQl-типу данных ставится в соответствие ODBC SQL_C – тип данных (fCType).
• Далее он преобразуется в C-тип данных.
• Фактически данные неоднократно конвертируются драйвером ODBC, что сказывается на быстродействии.