绑定参数 ODBC
在执行语句之前,SQL 语句中的每个参数都必须关联或绑定到应用程序中的变量。 当应用程序将变量绑定到某个参数时,会向驱动程序描述该变量(地址、C 数据类型等)。 此外,还会描述参数本身(SQL 数据类型、精度等)。 驱动程序将这些信息存储在其为该语句维护的结构中,并在执行该语句时使用这些信息从变量中检索值。
在执行语句之前,可以随时绑定或重新绑定参数。 如果在执行语句后重新绑定参数,则再次执行该语句之前不会应用绑定。 要将参数绑定到其他变量,应用程序只需将该参数重新绑定到新的变量,上一个绑定就会自动释放。
变量将一直与参数绑定,直至将另一个变量绑定到该参数,通过使用 SQL_RESET_PARAMS 选项调用 SQLFreeStmt 来解除绑定所有参数,或直至释放语句为止。 出于此原因,应用程序必须确保在解除绑定之前不会释放这些变量。 有关详细信息,请参阅分配和释放缓冲区。
由于参数绑定只是存储在驱动程序为该语句维护的结构中的信息,因此可以按任意顺序对其进行设置。 参数绑定也独立于所执行的 SQL 语句。 例如,假设应用程序绑定了三个参数,然后执行以下 SQL 语句:
INSERT INTO Parts (PartID, Description, Price) VALUES (?, ?, ?)
如果应用程序立即在同一语句句柄上执行 SQL 语句,
SELECT * FROM Orders WHERE OrderID = ?, OpenDate = ?, Status = ?
则使用 INSERT 语句的参数绑定,因为这些参数绑定存储在语句结构中。 在大多数情况下,这是一种糟糕的编程做法,应尽量避免采用此做法。 相反,应用程序应使用 SQL_RESET_PARAMS 选项调用 SQLFreeStmt,以取消绑定所有旧参数,然后绑定新参数。
本部分包含以下主题。