语句句柄

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

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

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

  • 语句的状态

  • 当前的语句级诊断

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

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

语句句柄在大多数 ODBC 函数中使用。 值得注意的是,它们用于以下函数中:绑定参数和结果集列(SQLBindParameterSQLBindCol)、准备和执行语句(SQLPrepareSQLExecuteSQLExecDirect)、检索元数据(SQLColAttributeSQLDescribeCol)、提取结果集(SQLFetch)以及获取诊断信息(SQLGetDiagFieldSQLGetDiagRec)。 还用于目录函数(SQLColumns、SQLTables 等)和许多其他函数。

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