#ifndef DATA_BASE_ENGINE_HEAD_FILE #define DATA_BASE_ENGINE_HEAD_FILE #pragma once //组件头文件 #include "KernelEngineHead.h" #include "QueueService.h" #include "TraceService.h" #include "QueueServiceEvent.h" ////////////////////////////////////////////////////////////////////////// //ADO 错误类 class CADOError : public IDataBaseException { //变量定义 protected: enSQLException m_enErrorType; //错误代号 CString m_strErrorDescribe; //错误信息 //函数定义 public: //构造函数 CADOError(); //析构函数 virtual ~CADOError(); //基础接口 public: //释放对象 virtual VOID Release() { return /*true*/; } //是否有效 virtual bool IsValid() { return AfxIsValidAddress(this, sizeof(CADOError)) ? true : false; } //接口查询 virtual void * QueryInterface(const IID & Guid, DWORD dwQueryVer); //功能接口 public: //错误类型 virtual enSQLException GetExceptionType() { return m_enErrorType; } //错误描述 virtual LPCTSTR GetExceptionDescribe() { return m_strErrorDescribe; } //异常代码 virtual HRESULT GetExceptionResult() { return (HRESULT)0; // } //功能函数 public: //设置错误 void SetErrorInfo(enSQLException enErrorType, LPCTSTR pszDescribe); }; ////////////////////////////////////////////////////////////////////////// //数据库对象 class CDataBase : public IDataBase { //信息变量 protected: CADOError m_ADOError; //错误对象 CString m_strConnect; //连接字符串 CString m_strErrorDescribe; //错误信息 //状态变量 protected: DWORD m_dwConnectCount; //重试次数 DWORD m_dwConnectErrorTime; //错误时间 const DWORD m_dwResumeConnectCount; //恢复次数 const DWORD m_dwResumeConnectTime; //恢复时间 //内核变量 protected: _CommandPtr m_DBCommand; //命令对象 _RecordsetPtr m_DBRecordset; //记录集对象 _ConnectionPtr m_DBConnection; //数据库对象 //函数定义 public: //构造函数 CDataBase(); //析构函数 virtual ~CDataBase(); //基础接口 public: //释放对象 virtual VOID Release() { if (IsValid()) delete this; return /*true*/; } //是否有效 virtual bool IsValid() { return AfxIsValidAddress(this, sizeof(CDataBase)) ? true : false; } //接口查询 virtual void * QueryInterface(const IID & Guid, DWORD dwQueryVer); //管理接口 public: //打开连接 virtual VOID OpenConnection(); //关闭记录 virtual VOID CloseRecordset(); //关闭连接 virtual VOID CloseConnection(); //重新连接 virtual bool TryConnectAgain(bool bFocusConnect, CComError * pComError); //连接信息 virtual bool SetConnectionInfo(DWORD dwDBAddr, WORD wPort, LPCTSTR szDBName, LPCTSTR szUser, LPCTSTR szPassword); //设置信息 virtual bool SetConnectionInfo(LPCTSTR szDBAddr, WORD wPort, LPCTSTR szDBName, LPCTSTR szUser, LPCTSTR szPassword); //切换记录 virtual VOID NextRecordset(); //状态接口 public: //是否连接错误 virtual bool IsConnectError(); //是否打开 virtual bool IsRecordsetOpened(); //记录集接口 public: //往下移动 virtual void MoveToNext(); //移到开头 virtual void MoveToFirst(); //是否结束 virtual bool IsRecordsetEnd(); //获取数目 virtual long GetRecordCount(); //获取大小 virtual long GetActualSize(LPCTSTR pszParamName); //绑定对象 virtual VOID BindToRecordset(CADORecordBinding * pBind); //获取数据 virtual VOID GetRecordsetValue(LPCTSTR pszItem, CDBVarValue & DBVarValue); //字段接口 public: //获取参数 virtual bool GetFieldValue(LPCTSTR lpFieldName, BYTE & bValue); //获取参数 virtual bool GetFieldValue(LPCTSTR lpFieldName, WORD & wValue); //获取参数 virtual bool GetFieldValue(LPCTSTR lpFieldName, INT & nValue); //获取参数 virtual bool GetFieldValue(LPCTSTR lpFieldName, LONG & lValue); //获取参数 virtual bool GetFieldValue(LPCTSTR lpFieldName, DWORD & ulValue); //获取参数 virtual bool GetFieldValue(LPCTSTR lpFieldName, UINT & ulValue); //获取参数 virtual bool GetFieldValue(LPCTSTR lpFieldName, DOUBLE & dbValue); //获取参数 virtual bool GetFieldValue(LPCTSTR lpFieldName, __int64 & llValue); //获取参数 virtual bool GetFieldValue(LPCTSTR lpFieldName, TCHAR szBuffer[], UINT uSize); //获取参数 virtual bool GetFieldValue(LPCTSTR lpFieldName, COleDateTime & Time); //获取参数 virtual bool GetFieldValue(LPCTSTR lpFieldName, bool & bValue); //命令对象接口 public: //插入参数 virtual void AddParameter(LPCTSTR pszName, ADOCG::DataTypeEnum Type, ADOCG::ParameterDirectionEnum Direction, LONG lSize, CDBVarValue & DBVarValue); //删除参数 virtual void ClearParameters(); //获得参数 virtual void GetParameter(LPCTSTR pszParamName, CDBVarValue & DBVarValue); //获取返回数值 virtual long GetReturnValue(); //执行接口 public: //执行语句 virtual VOID ExecuteProcess(LPCTSTR pszSPName, bool bRecordset); //执行命令 virtual VOID ExecuteSentence(LPCTSTR pszCommand, bool bRecordset); //内部函数 private: //获取错误 LPCTSTR GetComErrorDescribe(CComError & ComError); LPCTSTR GetComErrorDescribeEx(CComError & ComError, LPCTSTR pszSPName); //设置错误 void SetErrorInfo(enSQLException enErrorType, LPCTSTR pszDescribe); }; ////////////////////////////////////////////////////////////////////////// //数据库管理类 class CDataBaseEngine : public IDataBaseEngine, public IQueueServiceSink { //内核变量 protected: bool m_bService; //运行标志 CQueueServiceEvent m_QueueServiceEvent; //队列对象 IDataBaseEngineSink * m_pIDataBaseEngineSink; //通知钩子 //函数定义 public: //构造函数 CDataBaseEngine(void); //析构函数 virtual ~CDataBaseEngine(void); //基础接口 public: //释放对象 virtual VOID Release() { if (IsValid()) delete this; return /*true*/; } //是否有效 virtual bool IsValid() { return AfxIsValidAddress(this, sizeof(CDataBaseEngine)) ? true : false; } //接口查询 virtual void * QueryInterface(const IID & Guid, DWORD dwQueryVer); //服务接口 public: //启动服务 virtual bool StartService(); //停止服务 virtual bool ConcludeService(); //配置接口 public: virtual bool GetBurthenInfo(tagBurthenInfo & BurthenInfo); //配置模块 virtual bool SetDataBaseEngineSink(IUnknownEx * pIUnknownEx); //配置模块 virtual bool SetDataBaseEngineSink(IUnknownEx * pIUnknownEx[], WORD wSinkCount); //队列接口 public: //队列接口 virtual void OnQueueServiceSink(WORD wIdentifier, void * pBuffer, WORD wDataSize); //控制事件 public: //控制事件 virtual bool PostDataBaseControl(WORD wControlID, VOID * pData, WORD wDataSize); //请求事件 virtual bool PostDataBaseRequest(WORD wRequestID, DWORD dwContextID, VOID * pData, WORD wDataSize); //延期请求 virtual bool DeferDataBaseRequest(WORD wRequestID, DWORD dwContextID, VOID * pData, WORD wDataSize); }; ////////////////////////////////////////////////////////////////////////// #endif