Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Функции инициализации и завершения



 

Прежде чем прикладная программа сможет вызвать какую-либо из функций ODBC, она обязана выполнить инициализацию ODBC и установить окружение. ODBC использует окружение для отслеживания соединений с базой данных, установленного прикладной программой. В рамках одного окружения можно установить произвольное число соединений. Назначение окружения производится функцией ODBC SQLAllocEnv() и имеет следующий синтаксис

 

RETCODE SQLAllocEnv(phenv)

 

Таблица 4 Параметр для SQLAllocEnv

Тип Аргумент Использование Описание
HENV* phenv Выход (аналог параметра out для PL/SQL ORACLE) Указатель области хранения в памяти идентификатора окружения

 

Описание параметра SQLAllocEnv приведено в таблице 4. Освобождение идентификатора окружения происходит при вызове функции SQLFreeEnv(). Вызов данной функции производится в программе последним. Описание её в ODBC имеет следующий вид

 

RETCODE SQLFreeEnv(phenv)

 

Здесь параметр phenv имеет тот же смысл, что и в функции назначения окружения, однако в данном случае – это не “назначаемый”, а “освобождаемый” идентификатор и в отличие от SQLAllocEnv является входным (аналог in в PL/SQL).

Так же, как окружение прикладной программы представляется с помощью идентификатора окружения, идентификатор соединения представляет соединение между источником данных и прикладной программой. В отличие от окружения, идентификатор которого в программе один, идентификаторов соединения может назначаться несколько, для каждого источника данных, с которым прикладная программа предполагает соединиться. Назначение идентификаторов соединения производится посредством SQLAllocConnect(). Синтаксис её следующий:

 

RETCODE SQLAllocConnect(henv, phdbc)

 

При вызове функция может возвращать: SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE. Параметры её представлены в таблице 5:

 

Таблица 5 Параметры SQLAllocConnect

Тип Аргумент Использование Описание
HENV henv Вход Идентификатор окружения прикладной программы
HDBC* phdbc Выход Указатель области хранения памяти для идентификатора соединения

 

Менеджер драйверов распределяет память для соединения и возвращает идентификатор через phdbc. Парная для SQLAllocConnect функция SQLFreeConnect() освобождает идентификатор доступа и возвращает все назначенные SQLAllocConnect ресурсы (освобождает всю связанную с ним память):

 

RETCODE SQLFreeConnect(hdbc)

 

Здесь параметр hdbc – входной параметр представляющий освобождаемое соединение. Освобождение идентификатора соединения производится после разрыва соединения с источником данных ODBC на этапе завершения, когда необходимо освободить все ресурсы занятые прикладной программой. В случае необходимости соединения с очередным источником данных, назначенный ранее идентификатор можно использовать без каких-либо ограничений, однако после освобождения, идентификатор становится недействительным и не пригоден для соединения. В этом случае требуется выполнить его повторное назначение.

На базовом уровне API поддерживается лишь одна функция соединения, хотя на расширенных уровнях их достаточно много. В данном пособии ограничимся рассмотрением функции SQLConnect() базового уровня.

SQLConnect() загружает драйвер и устанавливает соединение с источником данных. Идентификатор соединения ссылается на местоположение области хранения всей информации о соединении, включая его статус, состояние транзакции и информацию об ошибке. Синтаксис данной функции следующий:

 

RETCODE SQLConnect (hdbc, szDSN, sbDSN, szUID, sbUID, szAuthStr,

cbAuthStr)

 

Таблица 6 Параметры SQLConnect

Тип Аргумент Использование Описание
HDBC hdbc Вход Идентификатор соединения
UCHAR* szDSN Вход Имя источника данных
SWORD sbDSN Вход Длина szDSN. Может быть SQL_NTS в случае если строка имеет нулевое окончание.
UCHAR* szUID Вход Имя пользователя
SWORD sbUID Вход Длина szUID или SQL_NTS
UCHAR* szAuthStr Вход Строка авторизации
SWORD cbAuthStr Вход Длина строки авторизации или SQL_NTS

 

Значение SQL_NTS (null terminated string) удобно использовать в случае задания строковых литералов либо указателей на таковые в качестве имен источника данных, пользователя и пароля. В синтаксисе языка С строкой-константой с автоматически выставляемым нулевым окончанием является, как известно последовательность символов взятая в парные двойные кавычки. Если источник данных не требует имени пользователя, то в функцию должны быть переданы либо нулевое значение, либо пустая строка (строка, состоящая лишь из нуль - терминатора), в качестве же размера указывается либо нулевое значение, либо SQL_NTS соответственно. То же самое касается и строки авторизации.

Так для того, чтобы установить соединение с источником данных, требующим имя пользователя и пароль, вызов SQLConnect может быть следующим:

 

RETCODE rc;

//…промежуточные операторы

rc=SQLConnect (hdbc, “RESTAURANTS”, SQL_NTS, “OWNER”,

SQL_NTS, “ICE-CREAM”, SQL_NTS).

 

Разрыв соединения с источником данных выполняет вызов SQLDisconnect():

 

RETCODE SQLDisconnect(hdbc)

 

Здесь hdbc – входной параметр функции, представляющий идентификатор доступа для отсоединения.

 

Выполнение операторов

 

В данном разделе рассмотрим два набора функций: функции управления каталогом и выполнения SQL – операторов. Функции управления каталогом возвращают информацию из системного каталога источника данных: имена таблиц, столбцов, табличную статистику и т. д. Функции выполнения операторов включают в себя функции непосредственного и подготовленного выполнения и связывания параметров.

Любая функция, которая имеет отношение к обработке или передаче SQL – оператора, требует в качестве параметра идентификатор оператора. Идентификатор оператора аналогичен идентификатору окружения или соединения за исключением того, что он ссылается на SQL – оператор. Идентификатор соединения может быть связан с несколькими идентификаторами операторов, но каждый идентификатор оператора связан только со своим идентификатором соединения. Назначение идентификатора оператора производится вызовом SQLAllocStmt(), которая выделяет область хранения в памяти для идентификатора оператора и связывает его с соединением, которое определяется собственным идентификатором.

Синтаксис для SQLAllocStmt() имеет вид:

 

RETCODE SQLAllocStmt(hdbc, phstmt)

 

Таблица 7 Описание параметров SQLAllocStmt()

Тип Аргумент Использование Описание
HDBC hdbc Вход Идентификатор соединения
HSTMT* phstmt Выход Указатель области хранения в памяти для идентификатора оператора

 

Парная для SQLAllocStmt() функция SQLFreeStmt() выполняет следующие действия:

● Останавливает любые SQL – операторы, которые в данный момент обрабатываются и связаны с заданным идентификатором оператора,

● Закрывают любые открытые курсоры, которые имеют отношение к определенному идентификатору оператора,

● Отбрасывает ожидаемые результаты,

● Дополнительно, освобождает все ресурсы, связанные с определенным идентификатором оператора.

Синтаксис SQLFreeStmt() имеет следующий вид:

 

RETCODE SQLFreeStmt (hstmt, fOption)

 

 

Таблица 8 Функция SQLFreeStmt

Тип Аргумент Использование Описание
HSTMT hstmt Вход Идентификатор оператора
UWORD fOption Вход Одна из следующих опций: ● SQL_CLOSE, ● SQL_DROP ● SQL_UNBIND ● SQL_RESET_PARAMS

 

Опция SQL_CLOSE отбрасывает неизвлечённые результаты и закрывает любые связанные с ними курсоры. Эта опция не влияет на соответствующие параметры, подготовленные операторы или соответствующие столбцы результата.

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

SQL_UNBIND освобождает (“отвязывает”) все буферы столбцов, связанные со столбцами результирующего множества запроса посредством SQLBindCol(). Описание данной функции приведено в разделе 2.5 данного методического пособия.

SQL_RESET_PARAMS освобождает все буферы параметров с фактическими значениями, связанные с маркерами параметров строки запроса. Связывание формальных параметров запроса (маркеров) с буферами фактических значений производится функцией SQLBindParametr(), описание которой приводится ниже в данном разделе.

 


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-07-13; Просмотров: 569; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.026 с.)
Главная | Случайная страница | Обратная связь