Установка значений параметров
Чтобы задать значение параметра, приложение просто задает значение переменной, привязанной к параметру. Не важно, если задано это значение, если он установлен перед выполнением инструкции. Приложение может задать значение до или после привязки переменной, и оно может изменить значение столько раз, сколько он хочет. При выполнении инструкции драйвер просто извлекает текущее значение переменной. Это особенно полезно при выполнении подготовленной инструкции более одного раза; приложение задает новые значения для некоторых или всех переменных при каждом выполнении инструкции. Пример этого см . в разделе "Подготовленное выполнение" ранее в этом разделе.
Если буфер длины или индикатора привязан к вызову 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 перед отправкой инструкции в источник данных.