Поделиться через


Привязка параметров (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, чтобы отменить привязку всех старых параметров, а затем привязать новые.

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