Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по субд Крупская.doc
Скачиваний:
55
Добавлен:
15.06.2014
Размер:
1.95 Mб
Скачать

76 Основной алгоритм программ odbc. Инициализация и завершение.

Любая программа с использованием ODBCможет быть разделена на триосновныечасти: инициализация, обработкаSQL– оператора и завершение программы. Главная часть программыODBCэто обработкаSQL– оператора. ВODBC, так же как и вPL/SQLпри обработке произвольногоSQL-оператора, необходимо выполнять связывание параметров. Связывание выполняет драйверODBC.

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

RETCODESQLFreeConnect(hdbc)

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

77 Выполнение операторов: функции управления каталогом.

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

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

Назначение идентификатора оператора производится вызовом SQLAllocStmt(), которая выделяет область хранения в памяти для идентификатора оператора и связывает его с соединением, которое определяется собственным идентификатором.

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

RETCODESQLAllocStmt(hdbc,phstmt)

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

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

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

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

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

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

RETCODESQLFreeStmt(hstmt,fOption)

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

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

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

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

Управление каталогом

Первая информация, которая может понадобиться прикладной программе для соединения с неизвестным источником данных – это информация о таблицах. ODBC-функцияSQLTablesвозвращает список имен таблиц, которые содержит указанный источник данных.

. Синтаксис SQLTables имеет вид:

RETCODE SQLTables (hstmt, szTableQualifier, sbTableQualifier,

szTableOwner, sbTableOwner, szTableName,

sbTableName, szTableType, sbTableType)