断开与数据源之间的连接
如果要终止客户程序与服务器之间的连接,客户程序应当完成以下的几个操作:
1. 调用 SQLFreeHandle 释放语句句柄,关闭所有打开的游标,释放相关的语句句柄
资源。(在非自动提交模式下,需事先提交当前的事务);
2. 调用函数 SQLDisconnect 关闭所有的连接;
3. 调用 SQLFreeHandle 释放连接句柄及其相关的资源;
4. 调用 SQLFreeHandle 释放环境句柄及其相关的资源;
一个完整的连接管理示范代码如下:
#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))) HENV henv;/* 环境句柄 */ HDBC hdbc;/* 连接句柄 */ HSTMT hsmt; /* 语句句柄 */ SQLRETURN sret; /* 返回代码 */ SQLINTEGER AUTOCOMMIT_MODE; void main(void) { /* 申请一个环境句柄 */ SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv); /* 设置环境句柄的 ODBC 版本 */ SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER); /* 申请一个连接句柄 */ SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); sret = SQLConnect(hdbc, (SQLCHAR *)"DM", SQL_NTS, (SQLCHAR *)"SYSDBA", SQL_NTS, (SQLCHAR *)"SYSDBA", SQL_NTS); if (RC_NOTSUCCESSFUL(sret)) { /* 连接数据源失败! */ SQLFreeHandle(SQL_HANDLE_DBC, hdbc); SQLFreeHandle(SQL_HANDLE_ENV, henv); exit(0); } /* 设置连接句柄属性,关闭自动提交功能 */ SQLSetConnectAttr(hdbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_OFF, SQL_IS_INTEGER); /* 取得连接句柄属性,取得提交的模式 */ SQLGetConnectAttr(hdbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)&AUTOCOMMIT_MODE, sizeof(SQLINTEGER), NULL); /* 申请一个语句句柄 */ SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hsmt); …在这里可以使用语句句柄进行相应的数据库操作… /* 释放语句句柄 */ SQLFreeHandle(SQL_HANDLE_STMT, hsmt); /* 提交连接上的事务 */ SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_COMMIT); /* 断开与数据源之间的连接 */ SQLDisconnect(hdbc); /* 释放连接句柄 */ SQLFreeHandle(SQL_HANDLE_DBC, hdbc); /* 释放环境句柄 */ SQLFreeHandle(SQL_HANDLE_ENV, henv); }
https://xpanx.com/
评论