Привязка параметров
Каждый маркер параметра в инструкции SQL должен быть сопоставлен переменной в приложении (привязан к ней), прежде чем можно выполнить инструкцию. Это делается путем вызова функции SQLBindParameter . SQLBindParameter описывает переменную программы (адрес, тип данных C и т. д.) драйверу. Она также определяет маркер параметра, указывая его порядковое значение, а затем описывая характеристики представляемого им объекта SQL (тип данных SQL, точность и т. д.).
Маркеры параметров могут быть привязаны или повторно привязаны в любое время перед выполнением инструкции. Привязка параметра действует до тех пор, пока не происходит одно из следующих событий.
Вызов SQLFreeStmt с параметром Option , заданным для SQL_RESET_PARAMS освобождает все параметры, привязанные к дескриптору инструкции.
Вызов SQLBindParameter с параметром ParameterNumber , заданным в порядковый номер маркера привязанного параметра, автоматически освобождает предыдущую привязку.
Приложение также может привязать параметры к массивам переменных программы для пакетной обработки инструкции SQL. Существует два типа привязки массивов.
Привязка на уровне столбца выполняется, если каждый отдельный параметр привязан к собственному массиву переменных.
Привязка со столбцами указывается путем вызова SQLSetStmtAttr с набором атрибутов для SQL_ATTR_PARAM_BIND_TYPE и ValuePtr, равных SQL_PARAM_BIND_BY_COLUMN.
Привязка на уровне строки выполняется, если все параметры в инструкции SQL привязаны в виде блока к массиву структур, которые содержат отдельные переменные для параметров.
Привязка по строкам определяется путем вызова SQLSetStmtAttr с набором атрибутов для SQL_ATTR_PARAM_BIND_TYPE и ValuePtr, заданных для размера структуры, включающей переменные программы.
Когда драйвер ODBC собственного клиента SQL Server отправляет на сервер символ или двоичные строковые параметры, он заполняет значения длиной, указанной в параметре ColumnSize SQLBindParameter. Если приложение ODBC 2.x указывает значение 0 для ColumnSize, драйвер заполняет значение параметра точностью типа данных. Точность составляет 8000 при подключении к серверам SQL Server, 255 при подключении к более ранним версиям SQL Server. ColumnSize содержит байты для вариантных столбцов.
SQL Server поддерживает определение имен для параметров хранимой процедуры. ODBC 3.5 также представила поддержку именованных параметров, используемых при вызове хранимых процедур SQL Server. Эта поддержка может использоваться для следующих действий.
Вызов хранимой процедуры и предоставление значений для подмножества параметров, заданных для хранимой процедуры.
Указание параметров в приложении не в той последовательности, в какой они были заданы при создании хранимой процедуры.
Именованные параметры поддерживаются только при использовании инструкции Transact-SQL EXECUTE
или escape-последовательности ODBC CALL для выполнения хранимой процедуры.
Если значение SQL_DESC_NAME
задано для параметра хранимой процедуры, остальные параметры хранимой процедуры также должны иметь значение SQL_DESC_NAME
. Если литералы используются в вызовах хранимой процедуры, где заданы параметрыSQL_DESC_NAME
, литералы должны использовать формат name=value, где имя — имя параметра хранимой процедуры (например, . @p1) Дополнительные сведения см. в разделе "Параметры привязки по имени" (именованные параметры).