ODBC
(Продолжительность занятия 35 минут)
Стандарт открытого доступа к базам данных (Open Database Connectivity, ODBC) — это типовой программный интерфейс для построения приложений управления БД в среде Microsoft Windows. ODBC использует специализированные драйверы баз данных подобно тому, как Windows применяет драйвер определенной модели принтера конкретного производителя. Разработчики могут создавать свои собственные драйверы ODBC или использовать разработанные другими фирмами. При конструировании драйвера необходимо учитывать требования соответствия стандарту ODBC.
Из этого занятия Вы узнаете о ODBC и компонентах Windows, задействованных при реализации ODBC-драйверов.
Изучив материал этого занятия,
Вы сможете:
- описать назначение ODBC;
- объяснить роль диспетчера драйверов ODBC;
- создать имя источника данных ODBC;
- перечислить уровни соответствия стандарту ODBC-драйверов.
Определение ODBC
Технология ODBC реализует стандартизованный интерфейс для доступа к разнородным SQL-совместимым базам данных (рис. 6.11). Для программирования доступа к информации в ODBC-совместимых БД применяется язык структурированных запросов (Structured Query Language, SQL).
Рис. 6.11 Подключение клиентского приложения к БД средствами ODBC
Используя ODBC и SQL, приложение может средствами одного кода получить доступ к SQL-совместимым системам управления базами данных (СУБД) разных производителей. ODBC позволяет разработчику создавать и распространять клиент-серверные программы, не зависящие от конкретной СУБД. Для подключения к выбранной пользователем БД достаточно просто добавить соответствующий драйвер базы данных. Эту работу берет на себя диспетчер драйверов ODBC.
Вот в чем причина гибкости ODBC:
- приложения не связаны узами фирменного API конкретного поставщика;
- операторы SQL включают непосредственно в исходный код или конструируют их на стадии выполнения; кроме того, приложение может игнорировать нижележащие протоколы обмена данными;
- данные передают и принимают в удобном для приложения формате.
ODBC соответствует формирующемуся стандарту интерфейса уровня вызова (Call-Level Interface) Международной организации по стандартизации (International Standards Organization, ISO).
Диспетчер драйверов ODBC
Приложение взаимодействует с диспетчером драйверов ODBC через интерфейс ODBC. Диспетчер драйверов — это библиотека динамической загрузки, которая загружает необходимые ODBC-драйверы (рис. 6.12).
Рис. 6.12 Диспетчер драйверов ODBC
Кроме загрузки необходимых драйверов, диспетчер выполняет дополнительные функции:
- обрабатывает некоторые инициализационные и информационные вызовы ODBC;
- передает вызовы функций ODBC от приложения драйверу;
- проверяет ошибки и контролирует состояние;
- регистрирует вызовы функций приложениями (дополнительная возможность).
Обычно для доступа к диспетчеру драйверов программа дополняется импортируемой библиотекой диспетчера драйверов (odbc.lib).
Диспетчер драйверов может при необходимости регистрировать в журнале все вызовы функций ODBC приложением (это происходит после проверки наличия ошибок). В журнал записывается имя каждой свободной от ошибок функции вместе со значениями входных аргументов и именами выходных.
Прежде чем передать вызов драйверу, отвечающему за подключение к конкретной БД, диспетчер проверяет аргументы функций и корректность изменения состояния, а также другие условия отсутствия ошибок. Таким образом драйвер БД освобождается от обработки большинства ошибок.
Имена источников данных
Имя источника данных (Data Source Name, DSN) — это именованный ресурс ODBC, который определяет местонахождение, тип драйвера и другие параметры БД, необходимые для доступа к ней (рис. 6.13). Диспетчер драйверов ODBC использует эту информацию для установления соединения и управления им.
Рис. 6.13 Три типа DSN и их функции
Существуют три типа DSN, различающиеся местом хранения информации, необходимой для подключения к серверу БД.
Информация о соединении для пользовательского DSN содержится в реестре Windows того компьютера, на котором создано соединение с данными.
Системные DSN относятся к компьютеру, а не к пользователю. Система или любой пользователь, обладающий соответствующими привилегиями, могут работать с источником данных, заданным системным DSN.
Информация о соединении для файлового DSN хранится в файле, доступном для чтения любому приложению: это облегчает перенос проекта с одного компьютера на другой.
> Создание DSN
В этом упражнении Вы создадите DSN для базы данных Northwind, чтобы пользоваться ею в следующих упражнениях этого занятия.
- Дважды щелкните значок 32bit ODBC на панели управления Windows. Если Вы работаете с Windows NT 4.0, этот значок называется ODBC.
- Откройте вкладку System DSN.
- Щелкните кнопку Add.
- Выберите Microsoft Access Driver и щелкните Finish.
- В поле Data Source Name введите nwind.
- Щелкните Select и найдите базу данных Northwind в папке WA\Practice\ nwind.mdb.
- Щелкните кнопку OK,
чтобы закрыть ODBC Data Source Administrator.
Теперь база данных Northwind доступна средствам разработки (например, Visual Basic) и средствам управления Web-узлом (например, Frontpage).
Соответствие требованиям API ODBC
Драйверы ODBC предоставляют программам доступ к разнообразным источникам данных: приложение на стадии выполнения может выяснить, какие возможности и какую грамматику SQL поддерживают данный драйвер и источник данных.
Все драйверы ODBC должны удовлетворять требованиям одного из трех уровней соответствия стандартам API ODBC (рис. 6.14).
Рис. 6.14 Уровни соответствия требованиям API ODBC
Драйверы ODBC должны, как минимум, соответствовать требованиям интерфейса базового уровня. Это основные функции драйвера, которые обычно необходимы приложениям.
Многим приложениям ODBC нужны драйверы, отвечающие требованиям следующего уровня; поэтому если драйвер ориентирован на широкую аудиторию, разработчикам придется реализовать все требования уровня 1, а условия второго можно рассматривать как перечень необязательных дополнений.
Ниже перечислены функции, которые должен реализовать драйвер для соответствия требованиям каждого из уровней.
Базовый уровень
- Выделение и освобождение дескрипторов всех типов.
- Обработка операторов прерывания.
- Объединение результирующих наборов столбцов.
- Обработка входных динамических параметров, включая массивы параметров.
- Обработка смещений.
- Управление курсорами и их именами.
- Предоставление доступа к описанию результирующих наборов.
- Выбор информации о каталоге.
- Управление источниками данных и соединениями. Получение от драйвера информации о поддержке им различных уровней ODBC.
- Подготовка и выполнение операторов SQL.
- Обработка пересылки результирующих наборов.
- Установка и выбор значения параметра (полностью и по частям).
- Получение диагностической информации. Выяснение возможностей драйвера, включая естественную форму операторов SQL.
- Завершение и отмена транзакций.
Уровень 1
- Соответствие требованиям базового уровня.
- Описание схемы таблиц и представлений БД средствами составных имен.
- Асинхронное выполнение функций ODBC.
- Поддержка перемещаемых курсоров (это позволяет предоставлять дополнительные методы доступа к результирующему набору).
- Выбор первичных ключей таблиц.
- Поддержка хранимым процедур, включая опрос словаря в отношении хранимых процедур.
- Подключение к источнику данных путем интерактивного просмотра доступных серверов.
- Поддержка выполнения некоторых операций с БД средствами функций ODBC вместо операторов SQL.
- Доступ к содержимому наборов, созданных в результате выполнения пакетов и хранимых процедур.
Примечание В спецификации ODBC 2.0 многие требования уровня I были перемещены на базовый уровень.
Уровень 2
- Соответствие требованиям первого уровня.
- Поддержка трехчастных имен таблиц и представлений базы данных.
- Описание динамических параметров.
- Поддержка входных, выходных и комбинированных параметров и результатов хранимых процедур.
- Поддержка закладок для обновления, удаления и поиска данных.
- Получение дополнительной информации из словаря.
- Поддержка асинхронного выполнения функций ODBC в составе одного оператора.
- Поддержка тайм-аута в запросах регистрации и SQL-запросах.
- Поддержка изменения уровня изоляции по умолчанию и выполнения транзакций с серийной изоляцией.
Соответствие требованиям SQL ODBC
Стандарт ODBC включает минимальные грамматические требования соответствия базовому уровню языка SQL. Драйверы ODBC, поддерживающие основную и расширенную грамматику SQL, могут выполнять более сложные команды SQL (рис. 6.15).
Рис. 6.15 Уровни соответствия требованиям в отношении грамматики SQL
Все драйверы должны поддерживать минимальную грамматику. Как и в случае API (см. предыдущий раздел), для соответствия одному из уровней по этому параметру необходимо, чтобы драйвер отвечал всем требованиям этого уровня.
Ниже перечислены требования различных уровней соответствия на основе спецификации SQL 92.
Минимальная грамматика SQL
- Язык определения данных (Data Definition Language, DDL): CREATE TABLE и DROP TABLE.
- Язык манипулирования данными (Data Manipulation Language, DML): простой SELECT, INSERT, UPDATE SEARCHED и DELETE SEARCHED.
- Выражения: простые.
- Типы данных: CHAR, VARCHAR или LONG VARCHAR
Основная грамматика SQL
- Минимальная грамматика SQL и типы данных.
- DDL: ALTER TABLE, CREATE INDEX, DROP INDEX, CREATE VIEW, DROP VIEW, GRANT и REVOKE.
- DML: полная поддержка SELECT.
- Выражения: вложенные запросы и функции агрегирования.
- Типы данных: DECIMAL, NUMERIC, SMALLINT, INTEGER, REAL, FLOAT, DOUBLE PRECISION
Расширенная грамматика SQL
- Минимальная и основная грамматика SQL и типы данных.
- DML: внешние соединения, поддержка позиционирования для операторов UPDATE и DELETE, SELECT FOR UPDATE, объединения.
- Выражения: скалярные функции, литеральная дата, время и штамп (дата/ время).
- Типы данных: BIT, TINYINT, BIGINT, BINARY, VARBINARY, LONG VARBINARY, DATE, TIME, TIMESTAMP.
- Пакетные операторы SQL.
- Вызовы процедур
Резюме
Технология ODBC реализует типовой интерфейс для доступа к разнородным SQL-совместимым базам данных. ODBC позволяет разработчику создавать и распространять клиент-серверные приложения, не привязанные к конкретной СУБД. Драйверы баз данных обеспечивают подключение приложений к СУБД. Загрузку драйверов, необходимых приложению-клиенту для доступа к БД, выполняет диспетчер драйверов ODBC. Имя источника данных задает местонахождение, тип драйвера и другие параметры, необходимые драйверу ODBC для доступа к БД. Все драйверы ODBC должны соответствовать требованиям в отношении API и SQL.