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

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


Функ1ия

Управление атрибутами SQLSetEnvAttr О SQLGetEnvAttr{) SQLSetConnectAttr()

SQLGetConnectAttr()

SQLSetStmtAttr() SQLGetStmtAttrО

Управление драйвером SQLDataSources() SQLGetFunctions ()

SQLGetlnfo О

SQLGetTypelnfo О

Описание

Устанавливает значение указанного атрибута среды SQL

Возвращает значение указанного атрибута среды SQL

Устанавливает значение указанного атрибута сеанса подключения к базе данных

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

Устанавливает значение указанного атрибута инструкции SQL Возвращает значение указанного атрибута инструкции SQL

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

Возвращает информацию о функциях CLI, поддерживаемых текущим драйвером

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

Возвращает информацию о поддерживаемых типах данных

Простейщая CLl-профамма, приведенная на рис 19 11, повторяет профаммы, представленные на рис 19 3 и 17 17, но в ней используются функции CL1 Реализованная в ней последовательность действий является основой большинства приложений CL1

1 Профамма подключается к библиотеке CLI и выделяет память под структуры данных, используемые функциями этой библиотеки

2 Профамма подключается к конкретному серверу баз данных

3 Программа формирует инструкции SQL в собственных буферах памяти

4 Профамма вызывает функции CL1, с помошью которых она просит сервер выполнить инструкции SQL и узнает о завершении этих инструкций

5 В случае успешного выполнения инструкции SQL программа с помощью еще одной функции CLI просит сервер завершить фанзакцию

6 Профамма отключается от сервера баз данных и освобождает память, занимаемую структурами данных

/* Программа изменяет все плановые объемы гродаж на заданную пользователем сумму */

/* файл с объявлениями структур и функции CLI */

Ifinclude <sqlcli h>

mam () (

SQLHENV

SQLHDBC

SQLHSTMT

SQLRETURN

char

char

char

env hdl,

conn hdl,

stmt hdl,

status, *svr name = demo , *user name = joe , *user pswd = xyz .

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

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

/* дескриптор инструкции */

/* код, возвращаемый функцией CII */

/* имя сервера */

/* имя пользователя для подключения */

/* пароль для подключения */

наЩ] 1 Простая програЫР использующая SQi/dt

. .... W- *



char amount str[31); /* введенная пользователем сумма */

char stmt bui[128], /* буфер для инструкции SQL -/

/* Выделяем память для среды SQL, сеанса подключения

и инструкции и получаем их дескрипторы */ SQLAllocHanale(SQL HANDLE ENV, SQL NULL HANDLE, &env hdl); SQLAllocHandle(SQL HANDLE DBC, env hdl, &conn hdl), SQLAlloc4andle{SQL HANDLE STMT, conn hdl, 4stmt hdl);

/* Подключаемся к базе данных, указав имя сервера, имя пользователя и пароль.

Спецификатор SQL NTS говорит о том, что мы передаем строку переменной длины, оканчивающуюся нулевым символом. */ SQLConnect (conn hdl, sr name, SQL NTS,

user name, SQL NTS,

user pswd, SQL NTS);

/* Запрашиваем у пользователя сумму, на которую нужно

увеличить или уменьшить плановый объем продаж */ prmtf ( Поднять/понизить планы на: ), gets(amount str);

/* Формируем инструкцию UPDATE и просим СУБД ее выполнить */ strcpy (stmt buf, update salesreps set quota = quota + ) ; strcat(stmt buf, amount str)/

status = SQLExecDirect(stmt/hdl, stmt buf, SQL NTS); If (status)

printf( Ошибка при обновлении.\n ); else

printf( Обновление завершено.\n ) ;

/* Завершаем транзакцию-и отключаемся от сервера */ SQLEndTran(SQL HANDLE ENV, env hdl, SQL COMMIT); SQLDiscOnnect(conn hdl);

/* Освобождаем дескрипт{2/ры и выходим из программы */ SQLFreeHandle(SQL HANDLE STMT, strat hdl); SQLFreeHandle(SQL HANDLE DBC, conn hdl); SQLFreeHandle(bQL HANDLE ENV, env hdl); exit(0);

I Рис. 19.11. простая программа, использующая SQL/CLI

Все функции CLI возвращают код состояния, указывающий, успещно ли функция выполнила свою работу В случае каких-либо проблем это значение представляет собой код ошибки или предупреждения. Все возможные коды состояния, возвращаемые функциями CLL описаны в табл. 19.3, В некоторых примерах программ, приведенных в этой главе, возвращаемые функциями CLI коды не проверяются, поскольку мы хотели сократить примеры и акценгировать ваше внимание на иллюстрируемых ими возможностях. Однако в реальных программах коды состояния следует проверять обязательно, чтобы убедиться, что каждая вызываемая функция CL1 выполнена успешно. Как правило, для этих кодов, как и для многих других фиксированных значений (таких как коды типов данных и идентификаторы инструкций) используются символические константы, определяемые в файле заголовков, который подключается к программе.



Таблица i 3 Коды состояния, возвращаемые фунщиями CU

Возвращаемое Описание значение

0 Инструкция выполнена успешно

1 Инструкция выполнена успешно, но получено предупреждение

]00 Данные не найдены (при извлечении результатов запроса)

99 Требуются дополнительные данные (не задан параметр динамической инструкции)

-1 Ошибка в ходе выполнения инструкции SQL

-2 Ошибка - в функции задан неверный дескриптор

Структуры СИ

Принципы взаимодействия приложения с сервером баз данных посредством CLI основаны на концепциях, отраженных в иерархии структур данных этого интерфейса

Среда SQL. Это самый верхний уровень, на котором осуществляется доступ к базе данных. CLI связывает со средой SQL структуру, предназначенную для отслеживания приложений, работающих в этой среде.

Сеанс подключения. Это логическое соединение с конкретным сервером баз данных. Концептуально CL1 позволяет одному приложению одновременно подключаться к нескольким различным серверам. Каждый сеанс подключения имеет собственные структуры данных, которые CLI использует для отслеживания состояния сеанса.

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

Для управления этими концептуальными единицами CLI применяет ту же методику, которая используется большинством современных операционных систем и библиотек. Со средой SQL, с каждым сеансом подключения и с каждой выполняемой инсфукцией SQL связывается указатель особого типа, называемый дескриптором. Дескриптор идентифицирует область памяти, используемую для хранения данных о конкретном объекте и управляемую непосредственно библиотекой CLL Практически каждой функции CL1 в качестве парамефа передается один из таких дескрипторов. На рис. 19 12 приведены объявления функций CLI, служащих для управления дескрипторами.

Создает дескриптор для использования в последующих вызовах

Функций CLI */ short SQLAllocHandle(

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

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

Рнс. ? 9.12. Функ1р1И си, служащие для управления дескрипторами



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

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