Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБ_РУС_БД.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
131.94 Кб
Скачать

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

Выполнение операторов SQL в ODBC

 

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

 

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

1. Изучить программный интерфейс функций SQLAllocStmt, SQLFreeStmt, SQLExecDirect, SQLPrepare, SQLExecute, SQLBindParameter.

2. Написать на языке программирования высокого уровня C/C++ программу для создания и заполнения данными таблицы в соответствии с заданием лабораторной работы N 2. Пользовательский интерфейс программы должен включать формы с полями ввода для занесения информации в таблицу. При нечетном номере варианта задания использовать прямое выполнение SQL-оператора, а при четном – подготавливаемое.

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

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

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

 

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

Функция SQLAllocStmt

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

RETCODE SQLAllocStmt(hdbc, phstmt)

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

 

Аргумент

Тип

Использование

Описание

hdbc

HDBC

Вход

Идентификатор соединения

phstmt

HSTMT FAR

Выход

Идентификатор оператора (адрес)

 

 

Функция SQLFreeStmt

 

Данная функция выполняет следующие действия:

    • останавливает обрабатываемые SQL-операторы, связанные с заданным идентификатором оператора;

    • закрывает открытые курсоры, имеющие отношение к заданному идентификатору оператора;

    • отбрасывает ожидаемые результаты;

    • освобождает все ресурсы, связанные с заданным идентификатором оператора.

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

RETCODE SQLFreeStmt(hstmt, fOption)

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

 

Аргумент

Тип

Использование

Описание

hstmt

HSTMT

Вход

Идентификатор оператора

fOption

UWORD

Вход

Опция завершения

 

 

Опция SQL_CLOSE закрывает курсор и отбрасывает все ожидаемые результаты. Опция SQL_DROP освобождает идентификатор оператора и все связанные с ним ресурсы, а также выполняет действия предыдущей опции. Опция SQL_UNBIND освобождает (“отвязывает”) все столбцы, используемые соответствующей функцией SQLBindCol. Опция SQL_RESET_PARAMS освобождает все параметры, используемые соответствующей функцией SQLBindParameter. Перечисленные опции используются применительно к заданному идентификатору оператора.

 

Функция SQLExecDirect

 

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

RETCODE SQLExecDirect(hstmt, szSqlStr, cbSqlStr)

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

 

Аргумент

Тип

Использование

Описание

hstmt

HSTMT

Ввод

Идентификатор оператора

szSqlStr

UCHAR FAR*

Ввод

Строка, содержащая SQL-оператор (адрес)

cbSqlStr

SDWORD

Ввод

Длина строки szSqlStr

 

 

Функция SQLExecDirect представляет самый быстрый способ запустить SQL-оператор при одноразовом выполнении.

 

Функция SQLPrepare

 

Данная функция подготавливает SQL-строку для выполнения. Функция SQLPrepare имеет следующий синтаксис:

RETCODE SQLPrepare(hstmt, szSqlStr, cbSqlStr)

Данная функция имеет такие же параметры, что и функция SQLExecDirect.

 

Функция SQLExecute

 

Данная функция выполняет подготовленный SQL-оператор. Если в операторе существуют какие-либо параметры, то при выполнении используются их текущие значения. Функция SQLExecute имеет следующий синтаксис:

RETCODE SQLExecute(hstmt),

где hstmt – идентификатор оператора (входной параметр типа HSTMT).

Перед вызовом функции SQLExecute должна быть выполнена функция SQLPrepare.

 

Функция SQLBindParameter

 

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

RETCODE SQLBindParameter(hstmt, ipar, fParamType, fCType, fSqlType, cbColDef, ibScale, rgbValue, cbValueMax, pcbValue)

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

 

Аргумент

Тип

Использование

Описание

hstmt

HSTMT

Ввод

Идентификатор оператора

ipar

UWORD

Ввод

Номер параметра

fParamType

SWORD

Ввод

Тип параметра

fCType

SWORD

Ввод

С-тип данных параметра

fSqlType

SWORD

Ввод

SQL-тип данных параметра

cbColDef

UDWORD

Ввод

Точность столбца источника данных

ibScale

SWORD

Ввод

Размер столбца источника данных

rgbValue

PTR

Ввод/вывод

Буфер значения параметра (адрес)

CbValueMax

SDWORD

Ввод

Максимальная длина буфера rgbValue

PcbValue

SDWORD FAR*

Ввод/вывод

Буфер значения длины параметра (адрес)

 

 

Параметры в SQL-операторах отмечаются маркером ?. Пример: INSERT INTO Emp(empid, firstname) VALUES (?,?).

 

Нумерация параметров начинается с 1. Тип параметра fParamType может принимать одно из трех значений: SQL_PARAM_INPUT, SQL_PARAM_INPUT_OUTPUT или SQL_PARAM_OUTPUT. Значение SQL_PARAM_INPUT используется для всех параметров, которые не включены в процедуру, а также для процедур, использующих параметры ввода. Значение SQL_PARAM_INPUT_OUTPUT маркирует параметр ввода/вывода в процедуре. Значение SQL_PARAM_OUTPUT маркирует значение возврата или параметр вывода в процедуре.

С-тип данных - это тип данных, из которого конвертируются данные. C-тип данных параметра может быть одним из следующих значений: SQL_C_BINARY, SQL_C_BIT, SQL_C_CHAR, SQL_C_DATE, SQL_C_DEFAULT, SQL_C_DOUBLE, SQL_C_FLOAT, SQL_C_SLONG, SQL_C_SSHORT, SQL_STINYINT, SQL_C_TIME, SQL_C_TIMESTAMP, SQL_C_ULONG, SQL_C_USHORT, SQL_C_UTINYINT, SQL_C_DEFAULT.

SQL-тип данных - это тип данных, в который конвертируются данные. Он должен совпадать с SQL-типом соответствующего столбца. SQL-тип данных может быть одним из следующих значений: SQL_BIGINT, SQL_BINARY, SQL_BIT, SQL_CHAR, SQL_DATE, SQL_DECIMAL, SQL_DOUBLE, SQL_FLOAT, SQL_INTEGER, SQL_LONGVARBINARY, SQL_LONGVARCHAR, SQL_NUMERIC, SQL_REAL, SQL_SMALLINT, SQL_TIME, SQL_TIMESTAMP, SQL_TINYINT, SQL_VARBINARY, SQL_VARCHAR.

Пример вызова функции SQLBindParameter:

rc=SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, TEST_LEN, 0, szTEST, 0, &cbTEST);

 

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

Данная лабораторная работа основывается на результатах предыдущей лабораторной работы. При выполнении данной лабораторной работы используются шаги 1-5, 1-10 алгоритма использования ODBC, представленного в предыдущей работе, в приведенном порядке.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]