Skip to content

语句句柄

语句句柄可被视为一种SQL语句,例如SELECT FROM Employee。 但语句句柄不只是SQL语句,还包含与该SQL语句相关联的所有信息,如语句所创建的所有结果集和执行语句时使用的参数。

每个语句都有独立的语句句柄标识,语句与单个连接相关联,但该连接上可有多个附属语句。 某些驱动程序会限制其支持的活动语句的数量,SQLGetInfo中的SQL_MAX_CONCURRENT_ACTIVITIES选项指定驱动程序在单个连接上支持的活动语句数。如语句具有挂起的结果,则将其定义为活动状态,其中的结果是结果集或受INSERT、UPDATE或DELETE语句影响的行数,或正在通过多次调用SQLPutData发送数据。

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

  • 语句的状态
  • 当前语句级别诊断
  • 绑定到语句的参数和结果集列的应用程序变量的地址
  • 每个语句特性的当前设置

语句句柄用于大多数ODBC函数,在函数中主要用于以下情形:

  • 绑定参数和结果集列(SQLBindParameter和SQLBindCol)
  • prepare和execute语句执行(SQLPrepare、 SQLExecute和SQLExecDirect)
  • 检索元数据(SQLColAttribute和SQLDescribeCol)
  • 提取结果(SQLFetch)
  • 检索诊断(SQLGetDiagField和SQLGetDiagRec)
  • 目录函数(SQLColumns、 SQLTables等)

语句句柄通过SQLAllocHandle分配,通过SQLFreeHandle释放。