Привязка параметра запроса – 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.

Примеры
  1. Использование именованного параметра:

    SELECT * FROM auto WHERE make = :MAKE;
  2. Использование неименованного параметра:

    SELECT * FROM auto where make = ?;
    INSERT INTO auto(PersonID ,Make) VALUES (? ,?);

Имеется возможность привязать для одного параметра несколько значений. Для этого нужно привязать этому параметру сразу целый массив из ItemCounter.

ParameterLength также должен быть представлен в виде массива значений типа long. При вызове функции LINTER_ExecuteStatement оператор будет выполнен для всех значений параметра.

Если параметр именованный, то его привязка может осуществляться как по имени, так и по номеру. Запрос может одновременно содержать и именованные, и неименованные параметры.

Примечание

В LinAPI при работе с СУБД ЛИНТЕР параметры могут быть трёх типов:

  1. входными (pInput);

  2. выходными (pOutput);

  3. входными и выходными (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");