Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Функции инициализации и завершения
Прежде чем прикладная программа сможет вызвать какую-либо из функций ODBC, она обязана выполнить инициализацию ODBC и установить окружение. ODBC использует окружение для отслеживания соединений с базой данных, установленного прикладной программой. В рамках одного окружения можно установить произвольное число соединений. Назначение окружения производится функцией ODBC SQLAllocEnv() и имеет следующий синтаксис
RETCODE SQLAllocEnv(phenv)
Таблица 4 Параметр для SQLAllocEnv
Описание параметра 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
Менеджер драйверов распределяет память для соединения и возвращает идентификатор через phdbc. Парная для SQLAllocConnect функция SQLFreeConnect() освобождает идентификатор доступа и возвращает все назначенные SQLAllocConnect ресурсы (освобождает всю связанную с ним память):
RETCODE SQLFreeConnect(hdbc)
Здесь параметр hdbc – входной параметр представляющий освобождаемое соединение. Освобождение идентификатора соединения производится после разрыва соединения с источником данных ODBC на этапе завершения, когда необходимо освободить все ресурсы занятые прикладной программой. В случае необходимости соединения с очередным источником данных, назначенный ранее идентификатор можно использовать без каких-либо ограничений, однако после освобождения, идентификатор становится недействительным и не пригоден для соединения. В этом случае требуется выполнить его повторное назначение. На базовом уровне API поддерживается лишь одна функция соединения, хотя на расширенных уровнях их достаточно много. В данном пособии ограничимся рассмотрением функции SQLConnect() базового уровня. SQLConnect() загружает драйвер и устанавливает соединение с источником данных. Идентификатор соединения ссылается на местоположение области хранения всей информации о соединении, включая его статус, состояние транзакции и информацию об ошибке. Синтаксис данной функции следующий:
RETCODE SQLConnect (hdbc, szDSN, sbDSN, szUID, sbUID, szAuthStr, cbAuthStr)
Таблица 6 Параметры SQLConnect
Значение 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()
Парная для SQLAllocStmt() функция SQLFreeStmt() выполняет следующие действия: ● Останавливает любые SQL – операторы, которые в данный момент обрабатываются и связаны с заданным идентификатором оператора, ● Закрывают любые открытые курсоры, которые имеют отношение к определенному идентификатору оператора, ● Отбрасывает ожидаемые результаты, ● Дополнительно, освобождает все ресурсы, связанные с определенным идентификатором оператора. Синтаксис SQLFreeStmt() имеет следующий вид:
RETCODE SQLFreeStmt (hstmt, fOption)
Таблица 8 Функция SQLFreeStmt
Опция SQL_CLOSE отбрасывает неизвлечённые результаты и закрывает любые связанные с ними курсоры. Эта опция не влияет на соответствующие параметры, подготовленные операторы или соответствующие столбцы результата. SQL_DROP освобождает все ресурсы, связанные с идентификатором, закрывает курсор, если он открыт и отбрасывает все ожидаемые строки результирующего множества. Эта опция завершает все обращения к hstmt, так как после успешного вызова SQLFreeStmt с этим параметром, идентификатор становится недействительным. SQL_UNBIND освобождает (“отвязывает”) все буферы столбцов, связанные со столбцами результирующего множества запроса посредством SQLBindCol(). Описание данной функции приведено в разделе 2.5 данного методического пособия. SQL_RESET_PARAMS освобождает все буферы параметров с фактическими значениями, связанные с маркерами параметров строки запроса. Связывание формальных параметров запроса (маркеров) с буферами фактических значений производится функцией SQLBindParametr(), описание которой приводится ниже в данном разделе.
Популярное:
|
Последнее изменение этой страницы: 2016-07-13; Просмотров: 607; Нарушение авторского права страницы