Привязка параметров ODBC

Перед выполнением инструкции SQL каждый параметр в инструкции SQL должен быть связан или привязан к переменной в приложении. Когда приложение привязывает переменную к параметру, она описывает, что переменная — адрес, тип данных C и т. д. — драйверу. Он также описывает сам параметр — тип данных SQL, точность и т. д. Драйвер сохраняет эти сведения в структуре, которая хранится для этой инструкции, и использует сведения для получения значения из переменной при выполнении инструкции.

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

Переменная остается привязанной к параметру, пока другая переменная не привязана к параметру, пока все параметры не будут отключены путем вызова SQLFreeStmt с параметром SQL_RESET_PARAMS или до тех пор, пока инструкция не будет освобождена. По этой причине приложение должно гарантировать, что переменные не освобождаются до тех пор, пока не будут отвязаны. Дополнительные сведения см. в разделе "Выделение и освобождение буферов".

Так как привязки параметров — это только сведения, хранящиеся в структуре, поддерживаемой драйвером инструкции, они могут быть заданы в любом порядке. Они также не зависят от выполняемой инструкции SQL. Например, предположим, что приложение привязывает три параметра, а затем выполняет следующую инструкцию SQL:

INSERT INTO Parts (PartID, Description, Price) VALUES (?, ?, ?)  

Если приложение немедленно выполняет инструкцию SQL

SELECT * FROM Orders WHERE OrderID = ?, OpenDate = ?, Status = ?  

в том же дескрипторе инструкции используются привязки параметров для INSERT инструкции, так как они являются привязками, хранящимися в структуре инструкции. В большинстве случаев это плохая практика программирования и следует избежать. Вместо этого приложение должно вызывать SQLFreeStmt с параметром SQL_RESET_PARAMS, чтобы отменить привязку всех старых параметров, а затем привязать новые.

Этот раздел содержит следующие подразделы.