WxAdoPool.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #ifndef __ODBC_POOL__
  2. #define __ODBC_POOL__
  3. #pragma once
  4. #include "SafeList.h"
  5. //#include <afxdb.h>
  6. typedef SafeList<AdoObj*> AdoConnList;
  7. class CWxAdoPool
  8. {
  9. ThreadSection m_critSection;
  10. // 空闲数据库连接池;
  11. AdoConnList m_listIdleConnections;
  12. // 在使用的数据库连接池;
  13. AdoConnList m_listBusyConnections;
  14. // 可用的指标:最大、最小;
  15. INT m_nMaxCount;
  16. INT m_nMinCount;
  17. // 引入的指针变量;
  18. DWORD m_dwDBPort;
  19. CString m_strDBSource;
  20. CString m_strDBAccount;
  21. CString m_strPassWord;
  22. CString m_strDBName;
  23. BOOL m_bNeedExit; // 退出数据池;
  24. BOOL m_bNeedStop;
  25. BOOL m_bNeedConnection;
  26. public:
  27. CWxAdoPool(void) ;
  28. ~CWxAdoPool(void);
  29. // 获取实例指针;
  30. static CWxAdoPool* GetInstance()
  31. {
  32. static CWxAdoPool* pInstance = NULL;
  33. if ( pInstance == NULL )
  34. pInstance = new CWxAdoPool;
  35. return pInstance;
  36. }
  37. // 初始化所有连接;
  38. DWORD InitializePool(
  39. IN LPCTSTR lpDBSource,
  40. IN CONST DWORD &dwDBPort,
  41. IN LPCTSTR lpDBAccount,
  42. IN LPCTSTR lpPassWord,
  43. IN LPCTSTR lpDBName,
  44. IN CONST INT &nMinConn = 1,
  45. IN CONST INT &nMaxConn = 5
  46. );
  47. // 关闭所有连接;
  48. void ReleasePool();
  49. // 设置数据库信息;
  50. void SetDBConnectionInfo(IN LPCTSTR lpDBSource, IN CONST DWORD &dwDBPort, IN LPCTSTR lpDBAccount, IN LPCTSTR lpPassWord, IN LPCTSTR lpDBName);
  51. // 初始化所有连接;
  52. INT IntiAllConnections();
  53. // 断开所有连接;
  54. void DestroyAllDBConnections();
  55. // 获取一个空闲连接;
  56. pAdoObj GetAConnection( IN CONST DWORD &dwTimeOut = 1000 );
  57. // 交还连接给空闲队列;
  58. void RestoreAConnection(IN pAdoObj pDBEngine);
  59. // 关闭一个连接;
  60. void CloseAConnection(pAdoObj &pDBEngine);
  61. // 关闭使用的连接;
  62. void CloseBusyConnection(IN pAdoObj &pDataBase);
  63. private:
  64. volatile LONG m_nRef;
  65. volatile LONG m_nObjRef;
  66. // 创建一个连接;
  67. pAdoObj InitAConnection();
  68. // 将守卫类友元化;
  69. friend class CAdoConnGuard;
  70. };
  71. // ODBC守卫垫片类;
  72. class CAdoConnGuard
  73. {
  74. pAdoObj m_pAdoConn;
  75. public:
  76. CAdoConnGuard(pAdoObj &pDBConn, CONST DWORD &dwTimeOut = 30000 ):m_pAdoConn(NULL)
  77. {
  78. pDBConn = CWxAdoPool::GetInstance()->GetAConnection( dwTimeOut );
  79. m_pAdoConn = pDBConn;
  80. }
  81. virtual ~CAdoConnGuard()
  82. {
  83. CWxAdoPool::GetInstance()->RestoreAConnection(m_pAdoConn);
  84. }
  85. };
  86. #endif // __SAFE_LIST__