Установка значений параметров

Чтобы задать значение параметра, приложение просто задает значение переменной, привязанной к параметру. Не важно, если задано это значение, если он установлен перед выполнением инструкции. Приложение может задать значение до или после привязки переменной, и оно может изменить значение столько раз, сколько он хочет. При выполнении инструкции драйвер просто извлекает текущее значение переменной. Это особенно полезно при выполнении подготовленной инструкции более одного раза; приложение задает новые значения для некоторых или всех переменных при каждом выполнении инструкции. Пример этого см . в разделе "Подготовленное выполнение" ранее в этом разделе.

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

  • Длина байтов данных в связанной переменной. Драйвер проверка эту длину, только если переменная является символом или двоичным значением (ValueType — SQL_C_CHAR или SQL_C_BINARY).

  • SQL_NTS. Данные являются строкой, завершающейся значением NULL.

  • SQL_NULL_DATA. Значение данных равно NULL, и драйвер игнорирует значение привязанной переменной.

  • SQL_DATA_AT_EXEC или результат макроса SQL_LEN_DATA_AT_EXEC. Значение параметра должно быть отправлено с помощью SQLPutData. Дополнительные сведения см. в разделе "Отправка длинных данных" далее в этом разделе.

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

Параметр

значение
Параметр

(SQL)

тип данных
Переменная (C)

тип данных
Значение в

привязка

переменная
Значение в

длина или индикатор

buffer[d]
"ABC" SQL_CHAR SQL_C_CHAR ABC\0[a] SQL_NTS или 3
10 SQL_INTEGER SQL_C_SLONG 10 --
10 SQL_INTEGER SQL_C_CHAR 10\0[a] SQL_NTS или 2
1 вечера SQL_TYPE_TIME SQL_C_TYPE_TIME 13,0,0[b] --
1 вечера SQL_TYPE_TIME SQL_C_CHAR {t '13:00:00'}\0[a], [c] SQL_NTS или 14
NULL SQL_SMALLINT SQL_C_SSHORT -- SQL_NULL_DATA

[a] "\0" представляет символ завершения null. Символ завершения null требуется только в том случае, если значение в буфере длины или индикатора SQL_NTS.

[b] Числа в этом списке — это числа, хранящиеся в полях структуры TIME_STRUCT.

[c] Строка использует предложение escape-даты ODBC. Дополнительные сведения см. в разделе "Литералы даты", "Время" и "Метка времени".

[d] Драйверы всегда должны проверка это значение, чтобы узнать, является ли это специальным значением, например SQL_NULL_DATA.

Что драйвер делает со значением параметра во время выполнения, зависит от драйвера. При необходимости драйвер преобразует значение из типа данных C и длины байтов привязанной переменной в тип данных SQL, точность и масштаб параметра. В большинстве случаев драйвер отправляет значение источнику данных. В некоторых случаях он форматирует значение как текст и вставляет его в инструкцию SQL перед отправкой инструкции в источник данных.