描述符句柄

描述符用以存放SQL语句的参数信息和结果集信息,因此描述符句柄只有和语句句柄关联时才有特定的意义。根据描述符存放的信息类型,描述符可以充当4种角色:

  • 用户级参数描述符(APD)。该种描述符存放绑定参数的相关信息,如存放参数数据的缓存地址,长度和C数据类型等。
  • 实现级参数描述符(IPD)。该种描述符存放SQL语句的实际参数信息,如参数的SQL数据类型,长度和是否容纳空值等。
  • 用户级行描述符(ARD)。该种描述符存放绑定列的相关信息,如存放结果集数据的缓存地址,长度和C数据类型等。
  • 实现级行描述符(IRD)。该种描述符存放SQL语句的返回结果集信息。

APD和ARD合称应用级描述符,IPD和IRD合称实现级描述符。

语句句柄在执行查询的过程中会用到所有4种角色的描述符句柄,因此在分配语句句柄时会自动分配4个描述符句柄,分别饰演4种角色,可以调用函数SQLGetStmtAttr获取相应的描述符句柄。这些描述符称为“自动分配描述符”,该种描述符属于且只能属于一个语句句柄,它们随语句句柄的分配和释放而存在和消失。

另一方面,用户也可以调用SQLAllocHandle分配描述符句柄(这样分配的描述符称为显式分配描述符)。显示分配描述符属于且只能属于一个已经建立连接的连接句柄,但它们可以和多个SQL语句相关联,同时扮演APD和ARD两种角色。

通过描述符句柄,应用程序可以调用下列类型的ODBC API函数:

  • 描述符属性函数SQLGetDescField、SQLGetDescRec和SQLSetDescField、SQLSetDescRec;
  • 描述符拷贝函数SQLCopyDesc;
  • 诊断信息函数。