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

1 ... 162 163 164 [ 165 ] 166 167 168 ... 264


функция Описание

Обработка результатов запроса на выборку

dbbindO Связывает столбец таблицы результатов запроса с профаммной пере-

менной

dbnextrow () Извлекает следующую строку из таблицы результатов запроса

dbnumcols О Получает количество столбцов в таблице результатов запроса

dbcolname () Получает имя столбца в таблице результатов запроса

dbcoltype () Получает тип данных столбца в таблице результатов запроса

dbcollen () Получает максимальную длину столбца в таблице результатов запроса

(data () Возвращает указатель на извлеченные данные

dbdatlen () Получает действительную длину извлеченных данных

dbcanqueryO Отменяет запрос, не дожидаясь, пока будут извлечены все строки

Базовые принципы работы с SQL Server

Простая программа, обновляющая базу данных в SQL Server, может использовать всего несколько функций из DB-Library. Программа, текст которой приведен на рис. 19.3, обновляет столбец quota таблицы salesreps в учебной базе данных. Эта программа выполняет ту же задачу, что и программа, представленная на рис. 17.17, но здесь вместо встроенного SQL используется интерфейс вызовов функций из SQL Server На рис. 19.3 проиллюстрированы основные этапы взаимодействия между профаммой и SQL Server:

1 Профамма с помощью функции dblogm () готовит регисфационную запись , занося в нее имя пользователя, пароль и всю остальную информацию, которая необходима для подключения к СУБД.

2 С целью подключения к базе данных профамма вызывает функцию dbopen (). Подключение должно быть установлено до того, как профамма начнет посылать в SQL Server инсфукции SQL.

3. Профамма формирует инсфукцию SQL и вызывает функцию dbcmdO , чтобы передать текст этой инсфукции в DB-Library. В результате последовательных вызовов функции dbcmd () очередной фрагмент текста добавляется к ранее переданному; необязательно, чтобы за один вызов функции dbcmd () передавался полностью весь текст инсфукции SQL.

4 Профамма вызывает функцию dbsqlexec (), давая SQL Server команду выполнить инструкцию SQL, переданную ранее функцией dbcmd ().

5 Профамма вызывает функцию dbresults (), чтобы определить, успешно ли была выполнена инструкция SQL.

Профамма вызьшает функцию dbexit (), чтобы разорвать соединение с SQL Server.

main () {

LOGINREC *loginrec; /* структура данных для хранения

регистрационной информации */ DBPROCESS *dbproc; /* структура данных, описывающая соединение */

char amount str[31]; /* число, введенное пользователем */

status; /* переменная состояния */

УЗ. простоя прогрщ, использующая интерфейс вызовов фун/аОС Server



/* Получить регистрационную структуру и указать имя пользователя и пароль */

logmrec = dblogin(},-----

DBSETLUSER (loginrec, scott ) ; М- ==Q

DBSETLPWD (loginrec, tiger ); <4-- ~

/* Подключиться к SQL Server */

dbproc = dbopen (loginrec, ) ; M----

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

/* Передать инструкцию SQL в библиотеку DB-Library */ dbcmd (dbproc, update salesreps set quota = quota + );- dbcmd (dbproc, amount str) ; -

/* Дать SQL Server команду выполнить инструкцию */ dbsqlexec(dbproc); -

/* Получить результаты выполнения инструкции */

status = dbresults (dbproc) ; ---(

if (status 1= SUCCEED)

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

printf( Обновление завершено.\г ), /* Разорвать соединение с SQL Server */

dbexit (dbproc) / -@

exit(0);

Рнс.19Л Простая программа использующая интерфейс вызовов функций SQL Server

Будет полезно сравнить программы, приведенные на рис. 19.3 и 17.17, чтобы отметить различия между встроенным SQL и библиотекой DB-Library:

Программа со встроенным SQL либо неявно подключается к единственной доступной базе данных (как в DB2), либо содержит встроенную инструкцию SQL для подключения (такую как инструкция connect в стандарте SQL2). Программа, использующая библиотеку DB-Library, подключается к SQL Server путем вызова функции dbopen ().

Инструкции update, которые получает СУБД, в обеих гхротраммах идентичны. В профамме со встроенным SQL эта инсфукция является частью исходного текста профаммы. В профамме, использующей библиотеку DB-Library, инсфукция передается в виде последовательности из одной или нескольких символьных сфок. Фактически методика, применяемая в DB-Library, больше напоминает инсфукцию execute immediate из динамического SQL, чем статический SQL.

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

В случае всфоенного SQL ошибки возвращаются в поле sqlcode сфуктуры sqlca. в случае библиотеки DB-Library вызов функции dbresults () позволяет определить код завершения любой инструкции SQL.



Подводя итоги сравнения, можно сказать, что программа со встроенным SQL (рис. 17.17) короче и более удобочитаема. Однако она не является профаммой, написанной только на С или только на SQL, и профаммист должен знать встроенный SQL, чтобы ее понять. Использование базовых переменных означает, что интерактивная и всфоенная формы инсфукции SQL отличаются. Кроме того, профамму со всфоенным SQL необходимо дополнительно обрабатывать с помощью специального препроцессора SQL, что увеличивает время компиляции. В противоположность этому профамма для SQL Server является простой профаммой на С без какого-либо наполнителя , она не требует специальной методики профаммирования и может сразу обрабатываться компилятором языка С.

Пакеты инструкций

Профамма, представленная на рис. 19.3, посылает в SQL Server одну инсфукцию SQL и затем проверяет код ее заверщения. Если прикладной профамме необходимо выполнить несколько инсфукций SQL, она может повторять цикл dbcmd () /dbsqlexec () /dbresults {) для каждой инсфукции. Но профамма может также послать в SQL Server несколько инсфукций для одновременного выполнения в виде единого пакета.

На рис. 19.4 приведен текст профаммы, в которой используется пакет из фех инсфукций. Как и предыдущая (рис. 19.3), эта профамма вызывает функцию dbcmd () для передачи текста инструкций SQL в DB-Library. В библиотеке DB-Library строки инструкций просто объединяются. Обратите внимание: включать в передаваемый текст пробелы или другие необходимые знаки препинания должна профамма. СУБД SQL Server не станет выполнять инструкции до тех пор, пока профамма не вызовет функцию dbsqlexec (). В этом примере в SQL Server были посланы три инструкции, поэтому профамма вызывает функцию dbresults () фи раза подряд. При каждом вызове этой функции СУБД возвращает результаты очередной инсфукции пакета, сообщая профамме, успешно ли она выполнена.

main()

LOGINREC *loginrec; /* структура данных для хранения регистрационной

информации */

DBPROCESS *dbproc; /* структура данных, описывающая соединение */

/* Удалить информацию о служащих с низким объемом продаж */ dbcmd(dbproc, delete from salesreps where sales < 100000.00 );

/* Увеличить личный план для служащих со средним объемом продаж */ dbcmd(dbproc, update salesreps set quota = quota + 10000.00 ); dbcmd(dbproc, where sales <= 150000.00 );

/* Увеличить личный план для служащих с высоким объемом продаж */ dbcmd(dbproc, update salesreps set quota = quota + 20000.00 ); dbcmd(dbproc, where sales > 150000.00 );

/* Дать SQL Server команду выполнить пакет инструкций */ dbsqlexec(dbproc);

P c. ? 9.4. Применение пакета иштрукций в SQL Server



1 ... 162 163 164 [ 165 ] 166 167 168 ... 264

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