Программирование >>  Sql: полное руководство 

1 ... 169 170 171 [ 172 ] 173 174 175 ... 264


/* Освобождает дескриптор, который был создан

функцией SQLAllocHandleО */ short SQLFreeHandle(

short hdlType, /* Входной: целочисленный код типа дескриптора */ long inHdl) /* Входной: освобождаемый дескриптор */

/* Создает дескриптор для новой среды SQL */ short SQLAllocEnv(

long *envHdl) /* Выходной: возвращаемый дескриптор среды */

/* Освобождает дескриптор, который был создан

функцией SQLAllocEnvO */ short SQLFreeEnvf

long envHdl} /* Входной; освобождаемый дескриптор среды */

/* Создает дескриптор для нового сеанса подключения */

short SQLAlIocConnect (

long envHdl, /* Входной: дескриптор среды */

long *connHdl) /* Выходной: возвращаемый дескриптор сеанса */

/* Освобождает дескриптор, который был создан

функцией SQLAlIocConnectО */ , short SQLFreeConnect( /

long connHdl) /* Входной: освобождаемый дескриптор сеанса */

/* Создает дескриптор длл новой инструкции SQL */ short SQLAllocStrat(

long envHdl, /* Входной; дескриптор среды */

long *stmtHdl) /* Выходной; возвращаемый дескриптор инструкции */

/* Освобождает дескриптор, которьхи бьш создан

функцией SQLAllocStratО */ / short SQLFreeStmt(

long stmtHdl, /* Входной-: освобождаемый дескриптор инструкции */ long option) /* Входной: опции, определяющие освобождение буферов

и закрытие наборов записей */

Рис. 19.12 Функции си, служащие для управления дескрипторами

Дескриптор создается с помощью функции SQLAllocHandle (). Первый ее пара-ктр говорит CLI о том, дескриптор какого типа вы хотите получить. В последнем 1араметре приложению возвращается значение созданного дескриптора. Получив деск->иптор, приложение может передавать его тем функциям CLI, которые работают в том <е самом контексте . Таким образом, различные потоки одной программы или азличные параллельно выполняющиеся профаммы (процессы) могут устанавливать юсредством CL1 свои собственные сеансы подключения и работать независимо друг от руга. Кроме того, эта технология позволяет одной профамме поддерживать несколько еансов подключения к различным серверам баз данных и параллельно выполнять есколько инсфукций SQL. Когда дескриптор профамме больше не нужен, она осво-ождает его с помощью функции SQLFreeHandle ().

В дополнение к универсальным функциям SQLAllocHandle () и SQLFreeHan-1е (), служащим для создания и освобождения дескрипторов любого типа, в биб-иотеке CL1 определены отдельные функции для создания и освобождения дескрип-эров среды, сеанса и инсфукции. Эти функции (SQLAllocEnvO , SQLAllocStmt О др.) были частью исходного варианта ODBC и по-прежнему поддерживаются



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

Среда SQL

Среда SQL - это контекст самого высокого уровня, используемый приложением дтя вызова функций CLL Если в профамме только один поток, ей обычно достаточно одной среды Если же потоков несколько, может быть создано по одной среде для каждого из них или одна общая среда на всех в зависимости от архитектуры программы Концептуально CLI допускает создание в пределах одной среды SQL нескольких сеансов подключения к разным серверам баз данных. Однако некоторые реализации CLI, созданные для конкретных СУБД, могут не допускать существования несколь-ки>одновременных сеансов.

Сеанс подключения

Внутри среды SQL профамма может установить один или несколько сеансов подключения к базе данных. Сеанс - это соединение между программой и конкретным сервером баз данных, через которое выполняются инструкции SQL. На практике сеанс обычно представляет собой сетевое соединение с сервером баз данных, расположенным на другом компьютере. Однако это может быть и логическое соединение между профаммой и СУБД, распо.тоженными в одной системе.

На рис. 19.13 приведены объявления функций CL1, используемых для управления сеансами подключения. Чтобы установить соединение, профамма сначала создает дескриптор сеанса, вызывая функцию SQLAllocHandle () и указывая соответствующий тип дескриптора. Затем профамма пытается подключиться к серверу с помощью функшш SQLConnect О . Если соединение будет установлено успешно, через него будут выполняться инсфукции SQL. Дескриптор сеанса передается в качестве параметра всем функциям CLI, связанным с обработкой инсфукиий SQL, - он указывает, через какое соединение им следует передавать и принимать данные. Когда сеанс больше не требуется, профамма отключается от сервера с помощью функции SQLDisconnect () и освобождает дескриптор сеанса с помошью функции SQLFreeHandle ().

/* Устанавливает соединение с сервером баз данных */ short SQLConnect(

long connHdl, /* Входной: дескриптор сеанса */

char *svrName, /* Входной; имя сервера баз данных */

short svrNaraLen, /* Входной: длина имени сервера */

char *userName, /* Входной; имя пользователя для подключения */

short usrNamLen, /* Входной: длина имени пользователя */

char *passwd, /* Входной; пароль для подключения */

short pswLen) /* Входной: длина пароля */

/* Отключение от сервера баз данных */ short SQLDisconnect!

long connHdl) /* Входной: дескриптор сеанса */

/* Возвращает имена доступных серверов баз данных */ short SQLDataSources(

Рис. 19 13. Функции си, служащие для правления сеансами подключения



lorg

envHdl,

Входной

дескриптор среды */

short

direction.

Входной:

определяет, описание какого сервера

из списка доступных серверов

следует получить (первый/следующий) */

char

*svrNarae,

Выходной:

буфер для имени сервера */

short

bufLen,

Входной;

длина буфера для имени сервера */

short

*naraLen,

Выходной.

буфер, в который записывается

реальная длина имени сервера */

char

*descrip.

Выходной:

буфер для строки описания */

short

buf2Len,

Входной:

длина буфера для строки описания */

short

*dscLen)

Выходной:

буфер, в который записывается

реальная длина описания */

Рис. 19.13. Фунпи CLI, служащие для управления сеансами подключения

Обычно приложение знает имя сервера баз данных, с которым оно собирается работать (по терминологии, используемой в стандарте, - сервера SQL ). Однако иногда выбор сервера предоставляется пользователю; например, так могут поступать универсальные профаммы формирования запросов. Такие профаммы могут воспользоваться функцией SQLDataSources о, возвращающей и(мена известных серверов SQL, т.е. источников данных, которые могут быть заданъг в вызовах функции SQLConnect () Чтобы получеть список всех доступных серверов, нужно соответствующее число раз вызвать функцию SQLDataSources (). Каждый вызов возврашает описание одного сервера, а когда все серверы перечислены, последний вызов возвращает код ошибки Второй парамеф функции SQLDataSourcesH.) позволяет указать, описание какого сервера следует получить: первого в списке, следукнцего в списке, первого в списке пользовательских источников данных или первого в списке системных источников данных.

Обработка инструкций SQL с помощью CLI

Используемая в CLI методика обработки инсфукций SQL очень похожа на писанную в предыдущей главе методику обработки инструкций в динамическом SQL Приложение передает библиотекеЧСЕ! инструкцию SQL в текстовом виде, как шмвольную строку. Она может быть выполнена либо сразу, либо в два этапа.

На рис. 19.14 приведены объявления базовых функций, связанных с обработкой шструкций SQL. Процесс их использования таков Прежде всего приложение должно )ызвать функцию SQLAllocHandle (), чтобы получить дескриптор инсфукции, ко- орый идентифицирует выполняемую инструкцию как для профаммы, так и для CLI. 1алее могут следовать вызовы функций SQLExecDirect (), SQLPrepare () и SQL-xecute (), и всем им передается дескриптор инсфукции. Когда дескриптор больше le нужен, он освобождается с помощью функции SQLFreeHandle О .

/* Непосредственное выполнение инструкции SQL */

short SQLExecDirect(

long StmtHdl, /* Входной; дескриптор инструкции */

char *stmtText, /* Входной: текст инструкции */

short teytLen) /* Входной: длиАа текста инструкции */

/* Подготовка инструкции SQL */ short SQLPrepare(

Ряс 19 14. Функции Си, пр/едназначенныв для обработки инструкций SQL

---:-- : л



1 ... 169 170 171 [ 172 ] 173 174 175 ... 264

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика