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

1 ... 178 179 180 [ 181 ] 182 183 184 ... 264


Таблица 19.5. Некоторые до

\ьныв фугдщии Ot

функция

SQLBrowseConnect()

SQLDrivers О SQLDriverConnect()

SQLNumParams()

SQLBmdParameter () SQ-LDescribeParam () SQLBulkOperations{]

SQLMoreResults()

SQLSetPos 0

SQLNativeSQLO

Описание

Возвращает информацию об атрибутах указанного источника данных ODBC, которые необходимо задать для подключения к источнику

Возвращает список доступных драйверов и имен их атрибутов

Расщиренная форма функции SQLConnect О , предназначенная для передачи ODBC дополнительной информации о сеансе подключения

Возвращает количество параметров последней подготовленной инструкции SQL

Дополняет возможности функции SQLBindParam ()

Возвращает;информацию о параметре инструкции SQL

Выполняет пакетные операции с использованием механизма закладок

Определяет, остались ли еще необработанные записи в таблице результатов запроса

Задает позицию указателя в результирующем наборе записей, разрешая приложению выполнять позиционные операции над этим набором

Возвращает перевод заданной инструкции SQL на родной диалект SQL той СУБД, с которой ведется работа

Управление сеансами

Две из расширенных возможностей ODBC связаны с организацией сеансов. Механизм просмотра информации о подключении предназначен для упрощения процесса подключения к источнику данных В основе этого механизма лежит функция SQLBrowseConnect () Сначала приложение вызывает эту функцию, указывая имя источника данных, и в ответ получает описание необходимых для подключения атрибутов (таких как имя пользователя и пароль). Программа собирает нужную информацию (например, запросив ее у пользователя) и передает ее функции SQLBrowseConnect (), которая возвращает описание последующих атрибутов Цикл продолжается до тех пор, пока приложение не предоставит ODBC всю информацию, необходимую для подключения к заданному источнику данных. Как только это будет сделано, соединение будет установлено.

Механизм группировки подключений предназначен для более эффективного управления процессами установления/разрыва соединения в среде клиент/сервер. Когда режим группировки подключений активизирован, ODBC, получив вызов функции SQLDisconnect О, не завершает сеанс подключения Он остается в неактивном состоянии в течение некоторого времени, и если за это время поступит новый вызов функции SQLConnect (), ODBC просто активизирует имеющееся подключение (если, конечно, приложению нужен тот же источник данных). Повторное использование подключений позволяет существенно снизить расходы, связанные с многократным Входом в серверную систему (и последующим выходом из нее) в приложениях. Выполняющих большое число коротких транзакций.



Трансляция диалектов SQL

Протокол ODBC определяет не только набор API-функций, но еще и стандарт, ный диалект SQL, который является подмножеством стандарта SQL2. Драйвер ODBC отвечает за преобразование инструкций этого диалекта в такие инструкции, с которыми может работать конкретный источник данных (например, выполняется модификация литеральных значений даты/времени, кавычек, ключевых слов и т.п) Функция SQLNativeSQL о позволяет приложснию увидеть результат этой трансляции. Кроме того, ODBC поддерживает Escape-последовательности, позволяющие приложению управлять трансляцией специфических элементов SQI\ которые сильно различаются в разных диалектах этого языка (внещние объединения, условия отбора с подстановочными знаками и т.п.).

Асинхронное выполнение функций

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

Эффективное выполнение >*нструкций

Выполнение каждой функции ODBC, запрашивающей выполнение инструкции SQL, сопряжено со значительными издержками, особенно если подключение к источнику данных осуществляется по сети. Чтобы снизить накладные расходы, драйвер ODBC может поддерживать пакетное выполнение инструкций, когда две или более инструкции SQL, переданные приложением, объединяются в пакет, выполняемый за один вызов функции SQLExecDirect о или SQLExecute (). Например, последовательность из десятка инструкцкй INSERT или update может быть таким образом выполнена как одна транзакция пакетного добавления или обновления. Это значительно уменьшит сетевой трафик в среде клиент/сервер, но вместе с тем и усложнит выявление и обработку ошибок. Обработка ошибок, происходящих при пакетном выполнении инструкций, осуществляется по-разному, в зависимости от конкретного драйвера.

Многие СУБД поддерживают другой способ пакетного выполнения инструкций - хранимые процедуры, находящиеся непосредственно в базе данных. Хранимая процедура может содержать не только последовательность инструкций SQL, но еше и некоторый дополнительный управляющий код, причем все это выполняется за один вызов процедуры. Протокол ODBC позволяет приложениям непосредственно вызывать хранимые процедуры из заданного источника. Для тех СУБД, которые поддерживают передачу параметров ;!(ранимым процедурам по именам, ODBC разрешает указывать имена параметров, а не их порядковые номера. Для тех источников данных, которые предоставляют расширенную информацию о параметрах, функцш SQLDe-scribeParamO позволяет приложению на этапе выполнения определять типы параметров. Получить значения выходных параметров хранимых процедур можно с помощью функции SQLBindParam () ИЛИ SQLGetData () . Функция SQLBmdParam ()



связывает выходные параметры процедуры с профаммными буферами, которые заполняются после завершения функции SQLExecDirect() или SQLExecute(). Функция SQLGetData () позволяет получать длинные значения сфоковых парамефов по частям.

Ряд дополнительных возможностей ODBC связан с многократным выполнением одиночной инструкции SQL (такой как insert или update). Методика смещения привязки позволяет приложению перед очередным выполнением инсфукции указать для привязки ее парамефов не абсолютный адрес, а смещение нового адреса относительно предыдущего. Благодаря этому можно создать массив значений одного парамефа и использовать его для выполнения последовательности вызовов инсфукции. В общем же случае модификация смещения парамефа гораздо удобнее, чем его повторная привязка с помощью функции SQLBindParam ().

Массивы параметров в ODBC предоставляют альтернативный метод многократного выполнения одной инструкции с различными параметрами. В данном случае несколько наборов парамефов передаются ODBC в одном вызове. Например, если приложению нужно добавить в таблицу несколько записей, оно может запросить выполнение инсфукции INSERT с парамефами и связать эти парамефы с массивами данных. Результат будет таким же, как при вьшолнении нескольких инсфукций INSERT по отдельности, но достигаться будет бысфее. ODBC поддерживает массивы парамефов двух типов: 1) когда каждая СфОка массива содержит один набор значений всех парамефов (горизонтальный массив); 2) когда каждая сфока массива содержит набор всех значений одного парамефа (вертикальный массив).

Эффективная обработка запросов

В среде клиент/сервер передача по сети объемных результатов запроса связана с большими издержками. Для сокращения этих издержек драйвер ODBC может поддерживать специальный режим выборки данных, осуществляемой посредством блочных наборов записей. В этом режиме при каждом вызове функции SQLFetch () или SQLFetchScroll () может возвращаться несколько записей (называемых текущим блоком записей ) из результирующего набора. Приложение должно связать возвращаемые столбцы с массивами, чтобы в них могли помещаться данные сразу из нескольких записей. Как и в случае парамефов, ODBC поддерживает как горизонтальные, так и вертикальные массивы записей. Кроме того, с помощью функции SQLSetPos О одну из строк текущего блока записей можно сделать текущей , если вам фебуется выполнить позиционное обновление или удаление данных.

Механизм закладок в ODBC обеспечивает еще одну возможность повышения эффективности работы приложений, в которых фебуется обрабатывать получаемые записи. Закладка - это не зависящий от конкретной СУБД уникальный идентификатор записи, используемый при выполнении инсфукций SQL. Для реализации механизма закладок драйвер может использовать первичные ключи или внутренние идентификаторы записей, но для приложения это совершенно не важно. Когда включен режим использования закладок, для каждой сфоки в таблице результатов запроса создается отдельная закладка-идентификатор. Закладки часто создаются в наборах записей с произвольным доступом, для того чтобы можно было многократно возвращаться к определенной сфОке. Кроме того, они удобны для выполнения позиционных удалений и обновлений. С их помощью можно также определить, являются ли две записи, возвращенные двумя разными запросами, одной и той же записью Или двумя разными записями с одинаковыми значениями данных. Закладки не только облегчают, но и ускоряют вьшолнение ряда операций (например, позрщионное обновление записи, идентифицируемой закладкой, вьшолняется гораздо бысфее, чем та же операция со сложным условием отбора). Однако создание и обработка закладок - это



1 ... 178 179 180 [ 181 ] 182 183 184 ... 264

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