123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- #ifndef __ODBC_POOL__
- #define __ODBC_POOL__
- #pragma once
- #include "SafeList.h"
- #include <afxdb.h>
- class CODBCPool
- {
- ThreadSection m_critSection;
- // 空闲数据库连接池;
- ODBCConnectList m_listIdleConnections;
- // 在使用的数据库连接池;
- ODBCConnectList m_listBusyConnections;
- // 可用的指标:最大、最小;
- INT m_nMaxCount;
- INT m_nMinCount;
- // 引入的指针变量;
- DWORD m_dwDBPort;
- CString m_strDBSource;
- CString m_strDBAccount;
- CString m_strPassWord;
- CString m_strDBName;
- BOOL m_bNeedExit; // 退出数据池;
- BOOL m_bNeedStop;
- BOOL m_bNeedConnection;
- public:
- CODBCPool(void) ;
- ~CODBCPool(void);
- // 获取实例指针;
- static CODBCPool* GetInstance()
- {
- static CODBCPool* pInstance = NULL;
- if ( pInstance == NULL )
- pInstance = new CODBCPool;
- return pInstance;
- }
- // 初始化所有连接;
- DWORD InitializePool(
- IN LPCTSTR lpDBSource,
- IN CONST DWORD &dwDBPort,
- IN LPCTSTR lpDBAccount,
- IN LPCTSTR lpPassWord,
- IN LPCTSTR lpDBName,
- IN CONST INT &nMinConn = 1,
- IN CONST INT &nMaxConn = 5
- );
- // 关闭所有连接;
- void ReleasePool();
- // 设置数据库信息;
- void SetDBConnectionInfo(IN LPCTSTR lpDBSource, IN CONST DWORD &dwDBPort, IN LPCTSTR lpDBAccount, IN LPCTSTR lpPassWord, IN LPCTSTR lpDBName);
- // 初始化所有连接;
- INT IntiAllConnections();
- // 断开所有连接;
- void DestroyAllDBConnections();
- // 获取一个空闲连接;
- CDatabase* GetAConnection( IN CONST DWORD &dwTimeOut = 1000 );
- // 交还连接给空闲队列;
- void RestoreAConnection(IN CDatabase *pDBEngine);
- // 关闭一个连接;
- void CloseAConnection(CDatabase *&pDBEngine);
- // 关闭使用的连接;
- void CloseBusyConnection(IN CDatabase *&pDataBase);
- private:
- volatile LONG m_nRef;
- volatile LONG m_nObjRef;
- // 创建一个连接;
- CDatabase* InitAConnection();
- // 将守卫类友元化;
- friend class ODBCConnGuard;
- };
- // ODBC守卫垫片类;
- class ODBCConnGuard
- {
- CDatabase *m_pODBCConn;
- public:
- ODBCConnGuard( CDatabase *&pDBConn, CONST DWORD &dwTimeOut = 30000 ):m_pODBCConn(NULL)
- {
- pDBConn = CODBCPool::GetInstance()->GetAConnection( dwTimeOut );
- m_pODBCConn = pDBConn;
- }
- virtual ~ODBCConnGuard()
- {
- CODBCPool::GetInstance()->RestoreAConnection(m_pODBCConn);
- }
- };
- #endif // __SAFE_LIST__
|