语句句柄

语句很容易被视为 SQL 语句,例如 SELECT * FROM Employee。 但是,语句不止是 SQL 语句,包含与该 SQL 语句关联的所有信息,例如语句创建的任何结果集和语句执行中使用的参数。 语句甚至不需要具有应用程序定义的 SQL 语句。 例如,语句中执行目录函数(如 SQLTables)时,会执行一个返回表单名称列表的预定义 SQL 语句。

每个语句由语句句柄标识。 语句与单一连接相关联,该连接上可以有多个语句。 某些驱动程序限制其支持的活动语句数;SQLGetInfo 中的 SQL_MAX_CONCURRENT_ACTIVITIES 选项指定驱动程序在单一连接上支持的活动语句数。 如果语句有挂起的结果,则该语句被定义为活动,其中结果是受 INSERT、UPDATE 或 DELETE 语句影响的结果集或行数,或者数据是通过多次调用 SQLPutData 发送。

在实现 ODBC(驱动程序管理器或驱动程序)的代码片段中,语句句柄标识包含语句信息的结构,例如:

  • 语句的状态

  • 当前语句级诊断

  • 绑定到语句参数和结果集列的应用程序变量的地址

  • 每个语句属性的当前设置

语句句柄用于大多数 ODBC 函数。 值得注意的是,句柄在函数中用于绑定参数和结果集列(SQLBindParameter 和 SQLBindCol)、准备和执行语句(SQLPrepare、SQLExecute 和 SQLExecDirect)、检索元数据(SQLColAttribute 和 SQLDescribeCol)、提取结果(SQLFetch)和检索诊断(SQLGetDiagField 和 SQLGetDiagRec)。 还用于目录函数(SQLColumns、SQLTables 等)和许多其他函数。

语句句柄使用 SQLAllocHandle 分配,使用 SQLFreeHandle 释放。