绑定参数 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,以取消绑定所有旧参数,然后绑定新参数。

本部分包含以下主题。