诸暨麻将添加redis
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

272 lines
7.5 KiB

  1. #ifndef DATA_BASE_ENGINE_HEAD_FILE
  2. #define DATA_BASE_ENGINE_HEAD_FILE
  3. #pragma once
  4. //组件头文件
  5. #include "KernelEngineHead.h"
  6. #include "QueueService.h"
  7. #include "TraceService.h"
  8. #include "QueueServiceEvent.h"
  9. //////////////////////////////////////////////////////////////////////////
  10. //ADO 错误类
  11. class CADOError : public IDataBaseException
  12. {
  13. //变量定义
  14. protected:
  15. enSQLException m_enErrorType; //错误代号
  16. CString m_strErrorDescribe; //错误信息
  17. //函数定义
  18. public:
  19. //构造函数
  20. CADOError();
  21. //析构函数
  22. virtual ~CADOError();
  23. //基础接口
  24. public:
  25. //释放对象
  26. virtual VOID Release()
  27. {
  28. return /*true*/;
  29. }
  30. //是否有效
  31. virtual bool IsValid()
  32. {
  33. return AfxIsValidAddress(this, sizeof(CADOError)) ? true : false;
  34. }
  35. //接口查询
  36. virtual void * QueryInterface(const IID & Guid, DWORD dwQueryVer);
  37. //功能接口
  38. public:
  39. //错误类型
  40. virtual enSQLException GetExceptionType()
  41. {
  42. return m_enErrorType;
  43. }
  44. //错误描述
  45. virtual LPCTSTR GetExceptionDescribe()
  46. {
  47. return m_strErrorDescribe;
  48. }
  49. //异常代码
  50. virtual HRESULT GetExceptionResult()
  51. {
  52. return (HRESULT)0; //
  53. }
  54. //功能函数
  55. public:
  56. //设置错误
  57. void SetErrorInfo(enSQLException enErrorType, LPCTSTR pszDescribe);
  58. };
  59. //////////////////////////////////////////////////////////////////////////
  60. //数据库对象
  61. class CDataBase : public IDataBase
  62. {
  63. //信息变量
  64. protected:
  65. CADOError m_ADOError; //错误对象
  66. CString m_strConnect; //连接字符串
  67. CString m_strErrorDescribe; //错误信息
  68. //状态变量
  69. protected:
  70. DWORD m_dwConnectCount; //重试次数
  71. DWORD m_dwConnectErrorTime; //错误时间
  72. const DWORD m_dwResumeConnectCount; //恢复次数
  73. const DWORD m_dwResumeConnectTime; //恢复时间
  74. //内核变量
  75. protected:
  76. _CommandPtr m_DBCommand; //命令对象
  77. _RecordsetPtr m_DBRecordset; //记录集对象
  78. _ConnectionPtr m_DBConnection; //数据库对象
  79. //函数定义
  80. public:
  81. //构造函数
  82. CDataBase();
  83. //析构函数
  84. virtual ~CDataBase();
  85. //基础接口
  86. public:
  87. //释放对象
  88. virtual VOID Release()
  89. {
  90. if (IsValid()) delete this;
  91. return /*true*/;
  92. }
  93. //是否有效
  94. virtual bool IsValid()
  95. {
  96. return AfxIsValidAddress(this, sizeof(CDataBase)) ? true : false;
  97. }
  98. //接口查询
  99. virtual void * QueryInterface(const IID & Guid, DWORD dwQueryVer);
  100. //管理接口
  101. public:
  102. //打开连接
  103. virtual VOID OpenConnection();
  104. //关闭记录
  105. virtual VOID CloseRecordset();
  106. //关闭连接
  107. virtual VOID CloseConnection();
  108. //重新连接
  109. virtual bool TryConnectAgain(bool bFocusConnect, CComError * pComError);
  110. //连接信息
  111. virtual bool SetConnectionInfo(DWORD dwDBAddr, WORD wPort, LPCTSTR szDBName, LPCTSTR szUser, LPCTSTR szPassword);
  112. //设置信息
  113. virtual bool SetConnectionInfo(LPCTSTR szDBAddr, WORD wPort, LPCTSTR szDBName, LPCTSTR szUser, LPCTSTR szPassword);
  114. //切换记录
  115. virtual VOID NextRecordset();
  116. //状态接口
  117. public:
  118. //是否连接错误
  119. virtual bool IsConnectError();
  120. //是否打开
  121. virtual bool IsRecordsetOpened();
  122. //记录集接口
  123. public:
  124. //往下移动
  125. virtual void MoveToNext();
  126. //移到开头
  127. virtual void MoveToFirst();
  128. //是否结束
  129. virtual bool IsRecordsetEnd();
  130. //获取数目
  131. virtual long GetRecordCount();
  132. //获取大小
  133. virtual long GetActualSize(LPCTSTR pszParamName);
  134. //绑定对象
  135. virtual VOID BindToRecordset(CADORecordBinding * pBind);
  136. //获取数据
  137. virtual VOID GetRecordsetValue(LPCTSTR pszItem, CDBVarValue & DBVarValue);
  138. //字段接口
  139. public:
  140. //获取参数
  141. virtual bool GetFieldValue(LPCTSTR lpFieldName, BYTE & bValue);
  142. //获取参数
  143. virtual bool GetFieldValue(LPCTSTR lpFieldName, WORD & wValue);
  144. //获取参数
  145. virtual bool GetFieldValue(LPCTSTR lpFieldName, INT & nValue);
  146. //获取参数
  147. virtual bool GetFieldValue(LPCTSTR lpFieldName, LONG & lValue);
  148. //获取参数
  149. virtual bool GetFieldValue(LPCTSTR lpFieldName, DWORD & ulValue);
  150. //获取参数
  151. virtual bool GetFieldValue(LPCTSTR lpFieldName, UINT & ulValue);
  152. //获取参数
  153. virtual bool GetFieldValue(LPCTSTR lpFieldName, DOUBLE & dbValue);
  154. //获取参数
  155. virtual bool GetFieldValue(LPCTSTR lpFieldName, __int64 & llValue);
  156. //获取参数
  157. virtual bool GetFieldValue(LPCTSTR lpFieldName, TCHAR szBuffer[], UINT uSize);
  158. //获取参数
  159. virtual bool GetFieldValue(LPCTSTR lpFieldName, COleDateTime & Time);
  160. //获取参数
  161. virtual bool GetFieldValue(LPCTSTR lpFieldName, bool & bValue);
  162. //命令对象接口
  163. public:
  164. //插入参数
  165. virtual void AddParameter(LPCTSTR pszName, ADOCG::DataTypeEnum Type, ADOCG::ParameterDirectionEnum Direction, LONG lSize, CDBVarValue & DBVarValue);
  166. //删除参数
  167. virtual void ClearParameters();
  168. //获得参数
  169. virtual void GetParameter(LPCTSTR pszParamName, CDBVarValue & DBVarValue);
  170. //获取返回数值
  171. virtual long GetReturnValue();
  172. //执行接口
  173. public:
  174. //执行语句
  175. virtual VOID ExecuteProcess(LPCTSTR pszSPName, bool bRecordset);
  176. //执行命令
  177. virtual VOID ExecuteSentence(LPCTSTR pszCommand, bool bRecordset);
  178. //内部函数
  179. private:
  180. //获取错误
  181. LPCTSTR GetComErrorDescribe(CComError & ComError);
  182. LPCTSTR GetComErrorDescribeEx(CComError & ComError, LPCTSTR pszSPName);
  183. //设置错误
  184. void SetErrorInfo(enSQLException enErrorType, LPCTSTR pszDescribe);
  185. };
  186. //////////////////////////////////////////////////////////////////////////
  187. //数据库管理类
  188. class CDataBaseEngine : public IDataBaseEngine, public IQueueServiceSink
  189. {
  190. //内核变量
  191. protected:
  192. bool m_bService; //运行标志
  193. CQueueServiceEvent m_QueueServiceEvent; //队列对象
  194. IDataBaseEngineSink * m_pIDataBaseEngineSink; //通知钩子
  195. //函数定义
  196. public:
  197. //构造函数
  198. CDataBaseEngine(void);
  199. //析构函数
  200. virtual ~CDataBaseEngine(void);
  201. //基础接口
  202. public:
  203. //释放对象
  204. virtual VOID Release()
  205. {
  206. if (IsValid()) delete this;
  207. return /*true*/;
  208. }
  209. //是否有效
  210. virtual bool IsValid()
  211. {
  212. return AfxIsValidAddress(this, sizeof(CDataBaseEngine)) ? true : false;
  213. }
  214. //接口查询
  215. virtual void * QueryInterface(const IID & Guid, DWORD dwQueryVer);
  216. //服务接口
  217. public:
  218. //启动服务
  219. virtual bool StartService();
  220. //停止服务
  221. virtual bool ConcludeService();
  222. //配置接口
  223. public:
  224. virtual bool GetBurthenInfo(tagBurthenInfo & BurthenInfo);
  225. //配置模块
  226. virtual bool SetDataBaseEngineSink(IUnknownEx * pIUnknownEx);
  227. //配置模块
  228. virtual bool SetDataBaseEngineSink(IUnknownEx * pIUnknownEx[], WORD wSinkCount);
  229. //队列接口
  230. public:
  231. //队列接口
  232. virtual void OnQueueServiceSink(WORD wIdentifier, void * pBuffer, WORD wDataSize);
  233. //控制事件
  234. public:
  235. //控制事件
  236. virtual bool PostDataBaseControl(WORD wControlID, VOID * pData, WORD wDataSize);
  237. //请求事件
  238. virtual bool PostDataBaseRequest(WORD wRequestID, DWORD dwContextID, VOID * pData, WORD wDataSize);
  239. //延期请求
  240. virtual bool DeferDataBaseRequest(WORD wRequestID, DWORD dwContextID, VOID * pData, WORD wDataSize);
  241. };
  242. //////////////////////////////////////////////////////////////////////////
  243. #endif