Привязка параметра запроса – LINTER_BindParameter
Прототип функции
L_LONG LINTER_BindParameter( L_WORD CursorID, /* идентификатор курсора */ L_WORD StatementID, /* идентификатор оператора */ L_SWORD ParameterNumber, /* номер параметра */ L_CHAR *ParameterName, /* имя параметра */ L_CHAR *NullIndicator, /* признак NULL-значения */ void *ParameterAddress, /* адрес параметра */ L_LONG ItemCounter, /* число элементов массива */ L_LONG Shift, /* характ-ка элемента массива пар-ов */ L_SWORD ParameterType, /* тип параметра */ L_LONG *Reserved, /* не используется */ L_LONG *ParameterLength);/* длина значения параметра */
Входные параметры
Параметр | Описание | |
---|---|---|
CursorID
| Идентификатор курсора | |
StatementID
| Идентификатор оператора | |
ParameterNumber
| Номер параметра (используется при ParameterName равном NULL). Нумерация параметров с 1 | |
ParameterName
| Адрес строки (заканчивается нулевым символом), содержащей имя параметра | |
NullIndicator
| Флаг NULL-значения | |
ParameterAddress
| Адрес буфера значений/адресов значений параметров | |
ItemCounter
| Количество параметров в массиве | |
Shift
| Характеристика элемента массива параметров: если значение >= 0, то переменная Shift задаёт размер элемента массива параметров, а если значение < 0, то ParameterAddress задает массив указателей значений параметров | |
ParameterType
| Тип параметра | |
ParameterLength
| Адрес длины значения параметра |
Выходные параметры
Отсутствуют.
Описание
Привязывает буфер параметра к оператору. При выполнении оператора значение из этого буфера будет подставлено на место соответствующего параметра. Пользователь может (используя LINTER_CreateStatement
) создавать запросы с параметрами, как именованными, так и неименованными.
Можно производить привязку параметров как массива указателей. Для этого аргумент Shift
должен быть равен -1.
Примеры
-
Использование именованного параметра:
SELECT * FROM auto WHERE make = :MAKE;
-
Использование неименованного параметра:
SELECT * FROM auto where make = ?; INSERT INTO auto(PersonID ,Make) VALUES (? ,?);
Имеется возможность привязать для одного параметра несколько значений. Для этого нужно привязать этому параметру сразу целый массив из ItemCounter
.
ParameterLength
также должен быть представлен в виде массива значений типа long
. При вызове функции LINTER_ExecuteStatement
оператор будет выполнен для всех значений параметра.
Если параметр именованный, то его привязка может осуществляться как по имени, так и по номеру. Запрос может одновременно содержать и именованные, и неименованные параметры.
Примечание
В LinAPI при работе с СУБД ЛИНТЕР параметры могут быть трёх типов:
-
входными (
pInput
); -
выходными (
pOutput
); -
входными и выходными (
pInputOutput
).
Битовые маски pInput
, pOutput
и pInputOutput
определены в заголовочном файле linapi.h
. Установка необходимого типа параметра осуществляется посредством объединения типа значения параметра с соответствующей битовой маской (pInput
, pOutput
или pInputOutput
) побитовой операцией «ИЛИ».
Примечание
Если параметр имеет строковый тип (t_String
), то значение ParameterLength
может быть любым. В этом случае значение параметра может считаться строкой, заканчивающейся двоичным нулем (ASCIZ-строка).
Пример
long lErr; short nCnnID; short nCrsID; short nStmtID; char cPar[] ='FORD'; long lParL; char cQuery[]="select make from auto where make = :MAKE"; ... if(lErr=LINTER_CreateStatement(nCnnID, cQuery, 0, &nStmtID)) processing_error(lErr, nCnnID, 0, 0, "LINTER_CreateStatement"); lParL =sizeof(cPar); if(lErr=LINTER_BindParameter(nCrsID,nStmtID,0,"MAKE", NULL,(void*)cPar,1,0,tChar, NULL,&lParL)) processing_error(lErr, 0, nCrsID, 0, "LINTER_BindParameter");