
- •Лабораторная работа n 1 Выборка данных из базы данных с использованием языка sql
- •Порядок выполнения работы
- •Содержание отчета
- •Основные сведения Язык sql
- •Оператор select
- •Предикаты условия поиска
- •Агрегатные функции
- •Операции реляционной алгебры
- •Работа с утилитой isql/w
- •Описание задания База данных книготорговой компании
- •Лабораторные задания типа а
- •Лабораторные задания типа b
- •Лабораторная работа n 2
- •Порядок выполнения работы Изучение языка баз данных
- •Типы данных Transact-sql
- •Создание таблицы
- •Определение столбца
- •Изменение таблиц
- •Создание представлений
- •Операторы, связанные с курсором
- •Одиночные операторы манипулирования данными
- •Создание индекса
- •Удаление объектов базы данных
- •Получение справочной информации об объектах базы данных
- •Варианты заданий
- •Лабораторная работа n 3 Соединение с базой данных в odbc
- •Лабораторная работа n 4
- •Лабораторная работа n 5
Лабораторная работа 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, представленного в предыдущей работе, в приведенном порядке.