Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции СУБД.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
6.32 Mб
Скачать

25.1.Архитектура odbc

Общая структура ODBC включает в себя следующие элементы:

Приложение. Выполняет обработку данных и вызов функций библиотеки ODBC для отправки SQL – операторов в СУБД и выборки возвращаемой СУБД информации.

Менеджер драйверов. Этот компонент выполняет загрузку драйверов по требованию приложения. Представляет собой библиотеку DLL.

Драйверы баз данных – Эти компоненты обрабатывают вызовы функций ODBC и направляют SQL – запросы в конкретные источники данных, а также возвращают полученные результаты приложению. При необходимости драйверы выполняют модификацию исходного запроса приложения с целью привидения его в соответствие синтаксическим требованиям целевой СУБД. От них не требуется собственной реализации тех возможностей, которые данная СУБД не поддерживает. Единственным исключением из этого правила являются драйверы для СУБД, не имеющих собственных ядер. В этом случае ядро СУБД, обеспечивающее хотя бы минимальную поддержку языка SQL, должно быть реализовано в самом драйвере. В свете вышесказанного для драйверов ODBC можно говорить об их уровнях соответствия SQL. Различают драйверы с минимальным уровнем поддержки SQL, основным и расширенным уровнями поддержки.

Источники данных – Этот компонент содержит те данные, доступ к которым необходим пользователю приложения. Данные сохраняются в базе данных, контролируемой целевой СУБД, операционной системой, а также сетевыми сервисами ОС.

25.2.Коды возврата

Все функции ODBC возвращают коды, чтобы показать в каком состоянии выполнения находится та или иная функция. Код возврата или RETCODE указывает на то, был ли вызов функции ошибочным или нет не указывает точной причины возникновения той или иной ошибки. В таблице 18 приведены коды возврата ODBC и их краткие описания.

Таблица 18 Коды возврата ODBC

Код возврата

Описание

1

2

SQL_SUCCESS

Функция выполнена успешно, информация об ошибке отсутствует

SQL_SUCCESS_WITH_INFO

Функция выполнена успешно, однако есть некоторая предупреждающая информация

SQL_NO_DATA_FOUND

Все строки результирующего множества извлечены. Это не является ошибкой, но указывает, что больше не осталось информации для выборки

SQL_ERROR

Ошибка в процессе выполнения данной функции. Имеется дополнительная информация об ошибке для восстановления.

SQL_INVALID_HANDLE

Возвращается функцией ODBC в случае, если какой-нибудь из идентификаторов-параметров данной функции является недействительным

SQL_STILL_EXECUTING

Возвращается какой-либо асинхронно выполняющейся функцией, находящейся в процессе выполнения

Продолжение таблицы 18

1

2

SQL_NEED_DATA

Возвращается функциями исполнения SQL – оператора в случае определения параметров операторов во время выполнения.

Проверка кодов возврата может выполняться посредством макросов RETCODE_IS_FAILURE или RETCODE_IS_SUCCESSFUL. Данные макросы приведены ниже:

#define RETCODE_IS_FAILURE (x) ((x) = = SQL_ERROR || \

(x) = = SQL_INVALID_HANDLE || \

(x) = = SQL_STILL_EXECUTING)

#define RETCODE_IS_SUCCESSFULL(x) (!RETCODE_IS_FAILURE(x))

Для использования макросов в программах ODBC, необходимо применять переменные типа кодов возврата, т.е. типа RETCODE, например:

#include <sql.h>

#include <windows.h>

RETCODE rc;

HENV henv;

rc=SQLAllocEnv(&henv);

if (RETCODE_IS_SUCCESSFULL(rc))

{операторы, выполняющиеся в случае истинности условия

оператора if };

В приведенном примере переменная rc предназначена для определения кода возврата функции SQLAllocEnv() (более подробное описание этой и других функций в последующих параграфах)