人大金仓 KingbaseES odbc 句柄
概述
在ODBC中句柄为32位的不透明值,用于标识特定项,此项可以是环境、连接、语句或描述符。在使用时首先需要调用SQLAllocHandle函数来创建指定的类型,并将句柄返回到应用程序中,而后应用程序来调用ODBC函数是使用句柄来标识该项。
ODBC有两个级别的句柄:驱动程序管理器句柄和驱动程序句柄。应用首先在驱动程序管理器中调用ODBC函数时使用的是驱动程序管理器句柄,而后驱动程序管理器再使用此句柄来查找相应的驱动程序句柄,并在调用驱动程序中的函数时使用该句柄。句柄仅对创建它们的组件有意义,也就是说,只有驱动程序管理器可以解释驱动程序管理器句柄,只有驱动程序可以解释其自己的驱动句柄。
句柄综述
在一个ODBC应用程序中可以申请多个环境句柄,一个环境句柄下可以申请多个连接句柄,连接句柄与数据源为一一对应的关系,一个连接句柄下同样可以申请多个语句句柄与描述符句柄,关系如下所示:
环境句柄
访问与环境关联的任何全局信息。例如:环境状态、当前环境状态诊断、当前在环境上分配的连接句柄、每个环境属性的当前设置。环境是访问数据的全局上下文;与环境关联的是本质上是全局的任何信息,例如:
1.环境的状态
2.当前环境级诊断
3.当前在环境中分配的连接句柄
4.每个环境属性的当前设置
在实现 ODBC (驱动程序管理器或驱动程序) 的代码片段中,环境句柄标识包含此信息的结构。ODBC 应用程序中不经常使用环境句柄。 它们始终用于对 SQLDataSources 和SQLDrivers 的调用,有时用于对 SQLAllocHandle、SQLEndTran、SQLFreeHandle、SQLGetDiagField 和 SQLGetDiagRec 的调用。实现 ODBC (驱动程序管理器或驱动程序) 的每个代码片段都包含一个或多个环境句柄。例如,驱动程序管理器为连接到它的每个应用程序维护单独的环境句柄。 环境句柄使用SQLAllocHandle 分配,并使用 SQLFreeHandle 释放。
连接句柄
标识每个连接,一个连接包含一个驱动程序和一个数据源。连接句柄包含连接的状态、当前连接属性等。连接由驱动程序和数据源组成,连接句柄标识了每个连接,不仅定义了要使用的驱动程序,还定义了用于该驱动程序的数据源。每个连接句柄标识包含连接信息的结构:
1.当前连接状态
2.当前连接级别
3.当前连接上分配的语句和描述符句柄
4.每个连接属性的当前设置
连接句柄的申请与释放:使用SQLAllocHandle函数分配连接句柄,使用SQLFreeHandle释放连接句柄。连接句柄的使用:连接到数据源:使用SQLConnect, SQLDriverConnect,与SQLBrowseConnect函数;从数据源断开:SQLDisConnect;获取驱动和数据源相关信息:SQLGetInfo;检索及诊断:SQLGetDiagField和SQLGetDiagRec;执行事务:SQLEndTran;设置和获取连接属性:SQLSetConnectAttr、SQLGetConnectAttr;获取本机的SQL语句格式:SQLNativeSql。
语句句柄
每个语句由语句句柄标识,包含语句信息的结构。例如语句创建的任何结果集以及语句执行中使用的参数。每个语句由语句句柄标识。一个语句与单个的连接相关,并且在那个连接上可能有多个语句。在实现ODBC(DriverManager或驱动程序)的代码中,语句句柄标识一个包含语句信息的结构:
1.语句状态
2.当前语句层诊断
3.应用程序变量绑定到语句参数和结果集列的地址
4.每个语句属性的当前设置。
语句句柄在大多数ODBC函数中使用,它们用于函数绑定参数及结果集列(SQLBindParameter和SQLBindCol)、准备执行语句(SQLPrepare、SQLExecute和SQLExecDirect)、检索元数据(SQLColAttribute和SQLDescribeCol)、提取结果(SQLFetch)和检索诊断(SQLGetDiagField和SQLGetDiagRec)。语句句柄使用SQLAllocHandle分配,使用SQLFreeHandle释放。
描述符句柄
是描述SQL语句的参数或结果集列的元数据集合。
1.应用程序参数描述符 (APD) :绑定到SQL语句中的参数的应用程序缓冲区信息
2.实现参数描述符 (IPD):SQL语句参数信息
3.应用程序行描述符 (ARD):绑定到结果集列的应用程序缓冲区信息
4.实现行描述符 (IRD):结果集中列信息
分配语句时, (一个填充每个角色) 的四个描述符。 这些描述符称为 自动分配的描述符 ,并且始终与该语句相关联。 应用程序还可以使用 SQLAllocHandle 分配描述符。 这些描述符称为 显式分配的描述符。 它们在连接上分配,可与该连接的一个或多个语句相关联,以在这些语句上履行 APD 或 ARD 的角色。可以在不显式使用应用程序描述符的情况下执行 ODBC 中的大多数操作。 但是,描述符为某些操作提供了方便的快捷方式。 例如,假设应用程序想要从两组不同的缓冲区插入数据。 若要使用第一组缓冲区,它将重复调用 SQLBindParameter 以将它们绑定到INSERT 语句中的参数,然后执行该语句。 若要使用第二组缓冲区,它将重复此过程。或者,它可以在一个描述符中设置对第一组缓冲区的绑定,并将绑定设置为另一个描述符中的第二组缓冲区。 若要在绑定集之间切换,应用程序只需调用 SQLSetStmtAttr 并将正确的描述符与语句关联为 APD。
参考资料
提供该题目相关内容在产品手册中可以系统学习的位置,例如:




