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