申请环境句柄与连接句柄
应用程序要和远程的数据库服务端进行通讯,须与数据库服务端建立连接。为建立ODBC数据源连接,需要使用环境句柄以及连接句柄。句柄有层次的概念,连接句柄总是和唯一的环境句柄相联系,所有的连接句柄必须在环境句柄释放之前释放。
应用程序可通过调用函数SQLAllocHandle申请环境句柄,调用函数SQLAllocHandle时必传入句柄类型SQL_HANDLE_ENV,申请环境句柄成功后,可在此环境句柄上申请连接句柄。申请环境句柄和连接句柄的示例代码如下:
c
#include <windows.h>
#include <sql.h>
#include <sqltypes.h>
#include <sqlext.h>
/* 检测返回代码是否为成功标志,当为成功标志时返回 TRUE,否则返回 FALSE */
#define RC_SUCCESSFUL(rc) ((rc) == SQL_SUCCESS || (rc) == SQL_SUCCESS_WITH_INFO)
/* 检测返回代码是否为失败标志,当为失败标志时返回 TRUE,否则返回 FALSE */
#define RC_NOTSUCCESSFUL(rc) (!(RC_SUCCESSFUL(rc)))
void main(void)
{
SQLHENV henv; /* 环境句柄 */
SQLHDBC hdbc; /* 连接句柄 */
SQLRETURN ret; /* 返回代码 */
/* 申请一个环境句柄 */
ret = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);
if(RC_NOTSUCCESSFUL(ret))
{
/* 环境句柄分配失败 */
return;
}
/* 设置环境句柄的 ODBC 版本 */
ret = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
/* 申请一个连接句柄 */
ret = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
if(RC_NOTSUCCESSFUL(ret))
{
/* 连接句柄分配失败 */
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return;
}
/* 释放连接句柄 */
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
/* 释放环境句柄 */
SQLFreeHandle(SQL_HANDLE_ENV, henv);
}