Соединение с базой данных в ODBC — КиберПедия 

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Соединение с базой данных в ODBC

2023-01-02 33
Соединение с базой данных в ODBC 0.00 из 5.00 0 оценок
Заказать работу

Цель работы: изучить функции ODBC для соединения с базой данных, а также функции для получения информации о драйвере и источнике данных, приобрести навыки использования данных функций при разработке клиентских приложений баз данных.

Порядок выполнения работы

 

1.Ознакомиться с концепцией ODBC.

2. Изучить программный интерфейс функций SQLAllocEnv, SQLFreeEnv, SQLAllocConnect, SQLFreeConnect, SQLConnect, SQLDisconnect, а также функций SQLGetInfo и  SQLGetFunctions.

3. Написать на языке программирования высокого уровня C/C++ программу, которая устанавливает соединение с источником данных, получает определенную вариантом задания информацию о драйвере и источнике данных, разъединяет соединение с источником данных.

4. Запустить ODBC-администратор и с его помощью выбрать ODBC-драйвер для используемого в программе источника данных.

5. Выполнить программу, разработанную в п.3.

6. Оформить отчет о проделанной работе.

 

Содержание отчета

1.Задание;

2. Краткое описание используемых функций ODBC;

3. Краткое описание программы;

4. Листинг программы;

5. Результаты выполнения программы;

 

Для последующих лабораторных работ содержание отчета будет иметь такую же структуру.

 

Основные сведения

 

Функция SQLAllocEnv

 

Данная функция распределяет память для идентификатора среды и инициализирует интерфейс ODBC для использования прикладной программой.

Функция SQLAllocEnv имеет следующий синтаксис:

RETCODE SQLAllocEnv(phev),

где phenv – адрес идентификатора среды (выходной параметр типа HENV FAR *).

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

 

Функция SQLFreeEnv

 

Данная функция освобождает идентификатор среды, а также всю назначенную ему память. Функция SQLFreeEnv имеет следующий синтаксис:

RETCODE SQLFreeEnv(henv),

где henv – идентификатор среды (входной параметр типа HENV).

 

Функция SQLAllocConnect

Данная функция распределяет память для идентификатора соединения в рамках среды, определенной с помощью идентификатора henv. Функция SQLAllocConnect имеет следующий синтаксис:

RETCODE SQLAllocConnect(henv, phdbc)

Описание параметров для данной функции приведено в следующей таблице.

 

Аргумент Тип Использование Описание
henv HENV Вход Идентификатор среды
phdbc HDBC FAR* Выход Идентификатор соединения (адрес)

Функция SQLFreeConnect

Данная функция освобождает идентификатор соединения и всю связанную с ним память. Функция SQLFreeConnect имеет следующий синтаксис:

RETCODE SQLFreeConnect(hdbc),

где hdbc – идентификатор соединения (входной параметр типа HDBC).

 

Функция SQLConnect

Функция SQLConnect загружает драйвер базы данных и устанавливает соединение с источником данных. Функция SQLConnect имеет следующий синтаксис:

RETCODE SQLConnect(hdbc, szDSN, cbDSN, szUID, cbUID, szAuthStr, cbAuthStr)

Описание параметров для данной функции приведено в следующей таблице.

 

Аргумент Тип Использование Описание
hdbc HDBC Вход Идентификатор соединения
szDSN UCHAR FAR* Вход Имя источника данных (адрес)
cbDSN SWORD Вход Длина szDSN.
szUID UCHAR FAR* Вход Идентификатор пользователя (адрес)
cbUID SWORD Вход Длина szUID
szAuthStr UCHAR FAR* Вход Пароль (адрес)
cbAuthStr   Вход Длина szAuthStr

 

Если строка имени источника данных, строка идентификатора пользователя или строка пароля имеют нулевое окончание, то, соответственно, cbDSN, cbUID или cbAuthStr могут быть установлены в SQL_NTS.

Если источник данных не требует имени пользователя (пароля), то нулевое значение или пустая строка должны быть переданы в szUID (szAuthStr), нулевое значение или SQL_NTS - в cbUID (cbAuthStr).

 

Функция SQLDisconnect

Данная функция закрывает соединение с источником данных. Функция SQLDisconnect имеет следующий синтаксис:

RETCODE SQLDisconnect(hdbc),

где hdbc – идентификатор соединения (входной параметр типа HDBC).

 

Функция SQLGetInfo

Данная функция возвращает общую информацию о драйвере и источнике данных, соответствующих заданному идентификатору соединения. Функция SQLGetInfo имеет следующий синтаксис:

RETCODE SQLGetInfo(hdbc, fInfoType, rgbInfoValue, cbInfoValueMax, cbInfoValue)

Описание параметров для данной функции приведено в следующей таблице.

 

Аргумент Тип Использование Описание
hdbc HDBC Вход Идентификатор соединения
fInfoType UWORD Вход Тип информации
rgbInfoValue PTR Выход Область хранения информации (адрес)
cbInfoValueMax SWORD Вход Максимальная длина области хранения (в байтах)
cbInfoValue SWORD FAR * Выход Длина области хранения информации (адрес)

 

В зависимости от запрашиваемого fTypeInfo возвращаемая информация будет одного из нижеследующих типов: строка символов с нуль-окончанием, 16-битное целое значение, 32-битный флаг или 32-битное двоичное значение. Ниже приведены некоторые значения fTypeInfo и их содержательная трактовка: SQL_DATABASE_NAME – имя базы данных, SQL_DBMS_NAME – имя СУБД, SQL_DRIVER_NAME –имя драйвера, SQL_ACTIVE_STATEMENT – число активных операторов в соединении. Для определения типов выборки, связанных с курсором, используется SQL_FETCH_DIRECTION. В качестве результата вызова функции возвращается 32-разрядная битовая маска, в которой выделяются следующие битовые маски: SQL_FD_FETCH_NEXT, SQL_FD_FETCH_FIRST,SQL_FD_FETCH_LAST,SQL_FD_FETCH_PRIOR, SQL_FD_FETCH_ABSOLUTE, SQL_FD_FETCH_RELATIVE. Чтобы выяснить, поддерживает ли источник данных позиционные операторы DELETE и UPDATE, следует использовать POSITIONED_STATEMENTS. При этом будет возвращена 32-разрядная битовая маска, которая перечисляет, какие позиционные SQL-операторы поддерживаются. Битовыми масками являются SQL_PS_POSITIONED_DELETE, SQL_PS_POSITIONED_UPDATE и SQL_PS_SELECT_FOR_UPDATE.

Функция SQLGetFunctions

Данная функция определяет, поддерживает ли драйвер заданную функцию ODBC. Функция SQLGetFunctions имеет следующий синтаксис:

RETCODE SQLGetFunctions(hdbc, fFunction, pfExists)

Описание параметров для данной функции приведено в следующей таблице.

 

Аргумент Тип Использование Описание
hdbc HDBC Вход Идентификатор соединения
fFunction UWORD Вход Функция ODBC
pfExists UWORD FAR* Выход Логическое значение TRUE или FALSE

Значение параметра fFunction должно быть вида: SQL_API_???, где??? – имя ODBC-функции. Например, для функции SQLGetInfo значением fFunction будет SQL_API_SQLGETINFO.

 

Коды возврата функций ODBC

Код возврата Описание
SQL_SUCCESS Функция выполнена успешно. Информация об ошибке для возврата отсутствует.
SQL_SUCCESS_WITH_INFO Функция выполнена успешно, однако имеется некоторая дополнительная информация о выполнении функции
SQL_NO_DATA_FOUND Все строки результирующего множества извлечены.
SQL_ERROR Ошибка в процессе выполнения данной функции
SQL_INVALID_HANDLE Недействительный идентификатор
SQL_STIL_EXECUTING Функция выполняется асинхронно и все еще находится в процессе выполнения
SQL_NEED_DATA При подготовке или выполнении какого-либо оператора драйвер установил, что прикладная программа должна определить не менее одного значения параметра.

 

Функция SQLError

Для получения дополнительной информации в случае возникновения ошибки (при этом кодом завершения ODBC-функции является значение SQL_ERROR SQL_SUCCESS_WITH_INFO) следует воспользоваться функцией SQLError. Функция SQLError имеет следующий синтаксис:

RETCODE SQLError(henv, hdbc, hstmt, szSqlState, pfNativeError, szErrorMsg, cbErrorMsgMax, cbErrorMsg)

Описание параметров для данной функции приведено в следующей таблице.

 

Аргумент Тип Использование Описание
Henv HENV Вход Идентификатор среды
Hdbc HDBC Вход Идентификатор соединения
Hstmt HSTMT Вход Идентификатор оператора
SzSqlState UCHAR FAR * Выход Строка состояния (адрес)
PfNativeError SDWORD FAR * Выход Собственный код ошибки СУБД (адрес)
SzErrorMsg UCHAR FAR * Выход Строка текста ошибки (адрес)
CbErrorMsgMax SWORD Вход Максимальная длина строки szErrorMsg
PcbErrorMsg SWORD FAR * Выход Общее число символов в строке текста ошибки (адрес)

Идентификаторы среды, соединения и оператора могут принимать нулевые значения – SQL_NULL_HENV, SQL_NULL_HDBC и SQL_NULL_HSTMT, соответственно. Функция SQLError возвращает информацию об ошибке для крайнего справа ненулевого идентификатора. Для строки состояния требуется шесть байт, из них пять – собственно для состояния, последний байт – нуль-окончание. В ряде случаев информация об ошибке может состоять более чем из одной части. В таких случаях для выборки информации функцию SQLError следует вызывать более одного раза.

Методические указания

Обобщенный алгоритм использования ODBC в прикладных программах представлен ниже (в скобках указаны основные используемые функции).

Фаза инициализации

Шаг 1. Назначение идентификатора среды (SQLAllocEnv)

Шаг 2. Назначение идентификатора соединения (SQLAllocConnect)

Шаг 3. Соединение с сервером (SQLConnect)

Шаг 4. Назначение идентификатора оператора (SQLAllocStmt)

Фаза обработки SQL операторов

Шаг 5. Выполнение оператора (SQLExecDirect, SQLPrepare, SQLExecute)

Шаг 6. Выборка данных (SQLFetch, SQLBindCol, SQLGetData, SQLExtendedFetch)

Фаза завершения

Шаг 7. Освобождение идентификатора оператора (SQLFreeStmt)

Шаг 8. Разрыв соединения с сервером (SQLDisconnect)

Шаг 9. Освобождение идентификатора соединения (SQLFreeConnect)

Шаг 10. Освобождение идентификатора окружения(SQLFreeEnv)

 

Вышеприведенный алгоритм является общим для лабораторных работ NN 3-5. В данной лабораторной работе используется алгоритм, включающий шаги 1, 2, 3, использование функций SQLGetFunctions и SQLGetInfo, шаги 8, 9, 10 в приведенном порядке.

Для возможности работы с функциями ODBC в программу на языках С или С++ необходимо включить заголовочный файл sql.h директивой

#include <sql.h>

Настройка ODBC производится следующим образом. В окне Control Panel щелкните мышью на пиктограмме ODBC. В появившемся окне выберите закладку User DSN, нажмите кнопку Add. В появившемся списке выберите SQL Server. Нажмите кнопку Finish. После этого в появившемся диалоговом окне ODBC SQL Server Setup заполните определенные поля. В поле Data Source Name впишите имя использующегося в прикладной программе источника данных (например, my_source), а в поле Server - имя используемого SQL-сервера (например, VT30213_S). В этом же диалоговом окне нажмите кнопку Options и в открывшемся окне в поле Database впишите имя используемой базы данных SQL Server (например, dbstud2). При этом имя источника данных связывается с указанной базой данных.

 

Варианты заданий

Задание типа А: Определить, поддерживает ли драйвер заданную функцию.

 

1. SQLAllocEnv, SQLMoreResults, SQLDriverConnect, SQLRowCount;

2. SQLFreeEnv, SQLColumnPrivileges, SQLStatistics, SQLParamData;

3. SQLAllocConnect, SQLExtendedFetch, SQLDrivers, SQLPutData;

4. SQLFreeConnect, SQLSetStmtOption, SQLColumns, SQLTransact;

5. SQLConnect, SQLGetCursorName, SQLTables, SQLGetTypeInfo;

6. SQLDisconnect, SQLSetConnectOption, SQLProcedure, SQLColAttributes;

7. SQLAllocStmt, SQLDataSources, SQLGetConnectOption, SQLCancel;

8. SQLFreeStmt, SQLSpecialColumns, SQLParamOption, SQLGetInfo;

9.SQLExecDirect, SQLTablePrivileges, SQLDescribeCol, SQLNativeSql;

10. SQLExecute, SQLGetData, SQLSetCursorName, SQLGetFunctions;

11. SQLPrepare, SQLFetch, SQLProcedureColumns, SQLPrimaryKeys;

12. SQLBindCol, SQLForeignKeys, SQLNumResultCols, SQLSetPos.

 

Задание типа Б: Выбрать информацию об источнике данных. Тип выбираемых данных помечается символами S, B, N, заключенными в круглые скобки. Тип данных, отмеченный символом S, соответствует символьной строке, а символом N – числовому значению. Тип данных, отмеченный символом?, является логическим. При этом надо определить, поддерживает ли источник данных указанные возможности.

 

1. Имя текущей базы данных (S);

2. Имя СУБД (S);

3. Имя драйвера (S);

4. Курсор с выборкой следующей строки (?);

5. Курсор с выборкой первой строки (?);

6. Курсор с выборкой последней строки (?);

7. Курсор с выборкой предыдущей строки (?);

8. Курсор с выборкой N-й строки (?);

9. Курсор с выборкой N-й строки по отношению к текущей позиции (?);

10. Оператор позиционного удаления (?);

11. Оператор позиционной модификации (?);

12. Число активных операторов в соединении (N).

 

Лабораторная работа N 4


Поделиться с друзьями:

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.059 с.