ODBC API функции

Основни ODBC функции

Както беше отбелязано в предишната лекция, всички функции на ODBC API могат условно да бъдат разделени на четири групи:

  • основни ODBC функции, които осигуряват взаимодействие с източника на данни;
  • инсталационни функции (настройка DLL);
  • инсталационни функции (инсталатор DLL) ODBC и източници на данни;
  • функции за преобразуване на данни (DLL за превод), извиквани при прехвърляне на данни от драйвера към източника на данни или обратно.

Следващата таблица изброява основните функции на ODBC API и тяхното ниво на съответствие (колоната Съответствие показва съответствие и посочва версията на ODBC, от която е налична функцията):

Инсталационни функции

DLL групата за настройка съдържа функции за конфигуриране на драйвери и източници на данни. Следващата таблица изброява функциите, които принадлежат към тази група.

Инсталационни функции

Функционалната група за инсталиране (DLL на инсталатора) съчетава функции за инсталиране на ODBC и конфигуриране на източници на данни. Следващата таблица изброява функциите, които принадлежат към тази група.

Съответствие с версията на ODBC API

Ако дадено приложение използва ODBC 2.x функции с ODBC 3.x мениджър на драйвери, мениджърът на драйвери отменя извикваната функция и предава извикването на функцията на ODBC 3.x драйвера съгласно следната таблица.

Дескриптори

Създаване на дескриптори

Преди да използва функциите на ODBC API, клиентското приложение създава дескриптор на среда (идентификатор), който определя глобалния контекст за достъп до източници на данни. Дескрипторът на средата осигурява достъп до различна информация, в т.чтекущи настройки на всички атрибути на средата, дескриптори на връзката, създадени за тази среда, диагностика на ниво среда.

Дескрипторът на средата дефинира някаква структура, съдържаща тази информация. Самият манипулатор на средата обикновено се използва при извикване на функциитеSQLDataSourcesиSQLDriversи при създаване на манипулатори за връзка.

За клиентско приложение, което реализира достъп до източник на данни чрез ODBC API функции, е достатъчно да има един дескриптор на средата.

Манипулаторът на средата се създава от функциятаSQLAllocHandleи се освобождава от функциятаSQLFreeHandle.

ФункциятаSQLAllocHandleбеше въведена в ODBC 3.x, заменяйки функциитеSQLAllocConnect,SQLAllocEnvиSQLAllocStmt, които съществуваха в ODBC 2.0. За да може приложение, използващо функциятаSQLAllocHandle, да работи чрез ODBC 2.x драйвери, мениджърът на драйвери версия 3.x заменя извикванията на функциите на третата версия с техните двойници на втората версия и предава това „коригирано“ извикване на ODBC драйвера.

За да се свържете с база данни, създайте дескриптор на връзката (идентификатор). Множество манипулатори за свързване могат да бъдат създадени за един манипулатор на среда.

За да изпълните SQL оператор, се създава дескриптор (идентификатор) на оператора.

Множество манипулатори на оператори могат да бъдат създадени за един манипулатор на връзка.

Съгласно спецификацията на ODBC за всяко приложение, драйверите могат да поддържат неограничен брой манипулатори от всеки тип. Конкретен драйвер обаче може да наложи някои ограничения върху броя на дръжките.

Функция, използвана за създаване на манипулатор на среда, връзка, изявление или приложение,има следното официално описание:

Параметърът HandleType ([Input]) указва една от следните константи типа манипулатор, който да бъде създаден:

Параметърът InputHandle([Input]) указва контекста, в който се добавя генерираният манипулатор. Ако типът манипулатор е SQL_HANDLE_ENV, тогава параметърът InputHandle е указан от константата SQL_NULL_HANDLE. Когато създавате манипулатор на среда, параметърът InputHandle указва манипулатор на среда, а за създаване на манипулатор на изявление ( SQL_HANDLE_STMT ) и манипулатор на приложение ( SQL_HANDLE_DESC ) той указва манипулатор на връзка.

Идентификаторите, които дефинират типа на дескриптора и самият дескриптор са описани в заглавните файлове sql.h и sqltypes.h, както следва:

Параметърът OutputHandlePtr ([Output]) е указател към буфер, в който се поставя структурата от данни, създадена за манипулатора.

ФункциятаSQLAllocHandleможе да върне следните стойности:

  • SQL_SUCCESS е стойност, дефинирана от ODBC API, за да посочи успешното завършване на функция;
  • SQL_SUCCESS_WITH_INFO - Стойност, дефинирана от ODBC API, за да покаже, че функцията е завършила успешно, но с уведомително съобщение;
  • SQL_INVALID_HANDLE - Стойност, дефинирана от ODBC API, за да покаже, че е зададен невалиден манипулатор;
  • SQL_ERROR е стойност, дефинирана от ODBC API, за да покаже, че е възникнала грешка при изпълнение на функция.

За да получи допълнителна информация за грешка при изпълнение на функция, клиентското приложение може да използва данните от манипулатора, зададен от параметъра InputHandle.

Ако възникне грешка при изпълнение на функцията (код за връщане SQL_ERROR ) или функцията е изпълнена, но с уведомително съобщение (код за връщане SQL_SUCCESS_WITH_INFO ), тогава стойността SQLSTATE може да бъде получена при извикване на функциятаSQLGetDiagRec.

След като дескрипторът на средата е създаден, атрибутът SQL_ATTR_ODBC_VERSION трябва да бъде зададен. В противен случай ще възникне грешка при опит за създаване на манипулатор на връзката.

За "консенсус стандартни" приложения функциятаSQLAllocHandleсе заменя по време на компилиране сSQLAllocHandleStd. Основната разлика с последното е, че извикването на тази функция с параметъра HandleType, зададен на SQL_HANDLE_ENV, задава атрибута на средата SQL_ATTR_ODBC_VERSION на SQL_OV_ODBC3 (тъй като "хармонизираните стандартни" приложения винаги са ODBC 3.x приложения и не изискват регистрация на версията на приложението).