}
}
//提交
m_retcode = ::SQLEndTran(SQL_HANDLE_DBC, m_hdbc, SQL_COMMIT);
if((m_retcode != SQL_SUCCESS) && (m_retcode != SQL_SUCCESS_WITH_INFO)) { ReportError(m_hdbc, SQL_HANDLE_DBC, “执行事务完成后,提交失败”); iReturn = -1; }
//再把提交方式改为自动 RESET_AUTO_COMMIT:
m_retcode =::SQLSetConnectOption(m_hdbc, SQL_AUTOCOMMIT, SQL_AUTOCOMMIT_ON); if((m_retcode != SQL_SUCCESS) && (m_retcode != SQL_SUCCESS_WITH_INFO)) {
ReportError(m_hdbc, SQL_HANDLE_DBC, “执行事务失败并且回滚失败”); iReturn = -1; }
return iReturn;
}
断开数据源连接并释放环境句柄
当完成对数据库的操作后,可以调用SQLDisconnect函数关闭同数据源的连接。当该句柄的事务操作还未完成时,应用程序调用SQLDisconnect函数,这时驱动器返回SQLStATE25000,表明此次事务没有变化且连接还打开。在应用程序调用SQLDisconnect函数之前没有释放与之相连的描述时,当成功的与数据源断开连接后,驱动器自动释放与之相连的参数、描述器等。担当与之相连的某一个参数还在执行一步操作时,SQLDisconnect返回SQL_ERROR,且SQLSTATE的值置为HY010
Demo1中相应断开数据源和释放环境句柄的代码如下:
//逐个释放各种句柄
BOOL CMyODBC::DisConnect() { if(m_hstmt != NULL) { SQLFreeHandle(SQL_HANDLE_STMT, m_hstmt); m_hstmt = NULL
}
if(this->m_hdbc != NULL) { SQLDisconnect(m_hdbc); SQLFreeHandle(SQL_HANDLE_DBC, m_hdbc); m_hdbc = NULL; }
if(this->m_henv != NULL) { SQLFreeHandle(SQL_HANDLE_ENV, m_henv); m_henv = NULL; }
if(this->m_pSet != NULL) { m_pSet = NULL; }
return TRUE; }
相关推荐: