|
Программирование >> Sql: полное руководство
/* Освобождает дескриптор, который был создан функцией 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. Функции си, служащие для правления сеансами подключения
Обычно приложение знает имя сервера баз данных, с которым оно собирается работать (по терминологии, используемой в стандарте, - сервера 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 ---:-- : л
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |