281 lines
6.8 KiB
C
281 lines
6.8 KiB
C
|
|
#ifndef DATA_BASE_ENGINE_HEAD_FILE
|
|||
|
|
#define DATA_BASE_ENGINE_HEAD_FILE
|
|||
|
|
|
|||
|
|
#pragma once
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD>
|
|||
|
|
#include "KernelEngineHead.h"
|
|||
|
|
#include "QueueService.h"
|
|||
|
|
#include "TraceService.h"
|
|||
|
|
#include "QueueServiceEvent.h"
|
|||
|
|
#include <vector>
|
|||
|
|
using namespace std;
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//ADO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
class CADOError : public IDataBaseException
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
protected:
|
|||
|
|
enSQLException m_enErrorType; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CString m_strErrorDescribe; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
CADOError();
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual ~CADOError();
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F>ͷŶ<CDB7><C5B6><EFBFBD>
|
|||
|
|
virtual VOID Release()
|
|||
|
|
{
|
|||
|
|
return /*true*/;
|
|||
|
|
}
|
|||
|
|
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>Ч
|
|||
|
|
virtual bool IsValid()
|
|||
|
|
{
|
|||
|
|
return AfxIsValidAddress(this, sizeof(CADOError)) ? true : false;
|
|||
|
|
}
|
|||
|
|
//<2F>ӿڲ<D3BF>ѯ
|
|||
|
|
virtual void * QueryInterface(const IID & Guid, DWORD dwQueryVer);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ܽӿ<DCBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual enSQLException GetExceptionType()
|
|||
|
|
{
|
|||
|
|
return m_enErrorType;
|
|||
|
|
}
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual LPCTSTR GetExceptionDescribe()
|
|||
|
|
{
|
|||
|
|
return m_strErrorDescribe;
|
|||
|
|
}
|
|||
|
|
//<2F>쳣<EFBFBD><ECB3A3><EFBFBD><EFBFBD>
|
|||
|
|
virtual HRESULT GetExceptionResult()
|
|||
|
|
{
|
|||
|
|
return (HRESULT)0; //
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>
|
|||
|
|
void SetErrorInfo(enSQLException enErrorType, LPCTSTR pszDescribe);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
class CDataBase : public IDataBase
|
|||
|
|
{
|
|||
|
|
//<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
|
|||
|
|
protected:
|
|||
|
|
CADOError m_ADOError; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CString m_strConnect; //<2F><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
|||
|
|
CString m_strErrorDescribe; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
|
|||
|
|
//״̬<D7B4><CCAC><EFBFBD><EFBFBD>
|
|||
|
|
protected:
|
|||
|
|
DWORD m_dwConnectCount; //<2F><><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>
|
|||
|
|
DWORD m_dwConnectErrorTime; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
|
const DWORD m_dwResumeConnectCount; //<2F>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
const DWORD m_dwResumeConnectTime; //<2F>ָ<EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
|
|
|||
|
|
//<2F>ں˱<DABA><CBB1><EFBFBD>
|
|||
|
|
protected:
|
|||
|
|
_CommandPtr m_DBCommand; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
_RecordsetPtr m_DBRecordset; //<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
_ConnectionPtr m_DBConnection; //<2F><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
CDataBase();
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual ~CDataBase();
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F>ͷŶ<CDB7><C5B6><EFBFBD>
|
|||
|
|
virtual VOID Release()
|
|||
|
|
{
|
|||
|
|
if (IsValid()) delete this;
|
|||
|
|
return /*true*/;
|
|||
|
|
}
|
|||
|
|
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>Ч
|
|||
|
|
virtual bool IsValid()
|
|||
|
|
{
|
|||
|
|
return AfxIsValidAddress(this, sizeof(CDataBase)) ? true : false;
|
|||
|
|
}
|
|||
|
|
//<2F>ӿڲ<D3BF>ѯ
|
|||
|
|
virtual void * QueryInterface(const IID & Guid, DWORD dwQueryVer);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual VOID OpenConnection();
|
|||
|
|
//<2F>رռ<D8B1>¼
|
|||
|
|
virtual VOID CloseRecordset();
|
|||
|
|
//<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual VOID CloseConnection();
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool TryConnectAgain(bool bFocusConnect, CComError * pComError);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
virtual bool SetConnectionInfo(DWORD dwDBAddr, WORD wPort, LPCTSTR szDBName, LPCTSTR szUser, LPCTSTR szPassword);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
virtual bool SetConnectionInfo(LPCTSTR szDBAddr, WORD wPort, LPCTSTR szDBName, LPCTSTR szUser, LPCTSTR szPassword);
|
|||
|
|
//<2F>л<EFBFBD><D0BB><EFBFBD>¼
|
|||
|
|
virtual VOID NextRecordset();
|
|||
|
|
|
|||
|
|
//״̬<D7B4>ӿ<EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>
|
|||
|
|
virtual bool IsConnectError();
|
|||
|
|
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool IsRecordsetOpened();
|
|||
|
|
|
|||
|
|
//<2F><>¼<EFBFBD><C2BC><EFBFBD>ӿ<EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>
|
|||
|
|
virtual void MoveToNext();
|
|||
|
|
//<2F>Ƶ<EFBFBD><C6B5><EFBFBD>ͷ
|
|||
|
|
virtual void MoveToFirst();
|
|||
|
|
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool IsRecordsetEnd();
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1>Ŀ
|
|||
|
|
virtual long GetRecordCount();
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1>С
|
|||
|
|
virtual long GetActualSize(LPCTSTR pszParamName);
|
|||
|
|
//<2F><EFBFBD><F3B6A8B6><EFBFBD>
|
|||
|
|
virtual VOID BindToRecordset(CADORecordBinding * pBind);
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
virtual VOID GetRecordsetValue(LPCTSTR pszItem, CDBVarValue & DBVarValue);
|
|||
|
|
//<2F>ֶνӿ<CEBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool GetFieldValue(LPCTSTR lpFieldName, BYTE & bValue);
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool GetFieldValue(LPCTSTR lpFieldName, WORD & wValue);
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool GetFieldValue(LPCTSTR lpFieldName, INT & nValue);
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool GetFieldValue(LPCTSTR lpFieldName, LONG & lValue);
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool GetFieldValue(LPCTSTR lpFieldName, DWORD & ulValue);
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool GetFieldValue(LPCTSTR lpFieldName, UINT & ulValue);
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool GetFieldValue(LPCTSTR lpFieldName, DOUBLE & dbValue);
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool GetFieldValue(LPCTSTR lpFieldName, __int64 & llValue);
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool GetFieldValue(LPCTSTR lpFieldName, LPSTR szBuffer, UINT uSize);
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool GetFieldValue(LPCTSTR lpFieldName, LPWSTR szBuffer, UINT uSize);
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool GetFieldValue(LPCTSTR lpFieldName, COleDateTime & Time);
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool GetFieldValue(LPCTSTR lpFieldName, bool & bValue);
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool GetFieldValue(LPCTSTR lpFieldName, BYTE* pData, UINT& uSize);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual void AddParameter(LPCTSTR pszName, DataTypeEnum Type, ParameterDirectionEnum Direction, LONG lSize, CDBVarValue & DBVarValue);
|
|||
|
|
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual void ClearParameters();
|
|||
|
|
//<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
|
|||
|
|
virtual void GetParameter(LPCTSTR pszParamName, CDBVarValue & DBVarValue);
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
|
virtual long GetReturnValue();
|
|||
|
|
|
|||
|
|
//ִ<>нӿ<D0BD>
|
|||
|
|
public:
|
|||
|
|
//ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual VOID ExecuteProcess(LPCTSTR pszSPName, bool bRecordset);
|
|||
|
|
//ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual VOID ExecuteSentence(LPCTSTR pszCommand, bool bRecordset);
|
|||
|
|
|
|||
|
|
//<2F>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
private:
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
LPCTSTR GetComErrorDescribe(CComError & ComError);
|
|||
|
|
//<2F><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>
|
|||
|
|
void SetErrorInfo(enSQLException enErrorType, LPCTSTR pszDescribe);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
class CDataBaseEngine : public IDataBaseEngine, public IQueueServiceSink
|
|||
|
|
{
|
|||
|
|
//<2F>ں˱<DABA><CBB1><EFBFBD>
|
|||
|
|
protected:
|
|||
|
|
bool m_bService; //<2F><><EFBFBD>б<EFBFBD>־
|
|||
|
|
CQueueServiceEvent m_QueueServiceEvent; //<2F><><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
|
|||
|
|
//IDataBaseEngineSink * m_pIDataBaseEngineSink; //֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
vector<IDataBaseEngineSink *> m_pIDataBaseEngineSinks; //֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD>
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
CDataBaseEngine(void);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual ~CDataBaseEngine(void);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F>ͷŶ<CDB7><C5B6><EFBFBD>
|
|||
|
|
virtual VOID Release()
|
|||
|
|
{
|
|||
|
|
if (IsValid()) delete this;
|
|||
|
|
return /*true*/;
|
|||
|
|
}
|
|||
|
|
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>Ч
|
|||
|
|
virtual bool IsValid()
|
|||
|
|
{
|
|||
|
|
return AfxIsValidAddress(this, sizeof(CDataBaseEngine)) ? true : false;
|
|||
|
|
}
|
|||
|
|
//<2F>ӿڲ<D3BF>ѯ
|
|||
|
|
virtual void * QueryInterface(const IID & Guid, DWORD dwQueryVer);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool StartService();
|
|||
|
|
//ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool ConcludeService();
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD>渺<EFBFBD><E6B8BA>
|
|||
|
|
virtual bool GetBurthenInfo(tagBurthenInfo & BurthenInfo);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ýӿ<C3BD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
|
|||
|
|
virtual bool SetDataBaseEngineSink(IUnknownEx * pIUnknownEx);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
|
|||
|
|
virtual bool SetDataBaseEngineSink(IUnknownEx * pIUnknownEx[], WORD wSinkCount);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>нӿ<D0BD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD>нӿ<D0BD>
|
|||
|
|
virtual void OnQueueServiceSink(WORD wIdentifier, void * pBuffer, WORD wDataSize);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
|
|||
|
|
virtual bool PostDataBaseControl(WORD wControlID, VOID * pData, WORD wDataSize);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
|
|||
|
|
virtual bool PostDataBaseRequest(WORD wRequestID, DWORD dwContextID, VOID * pData, WORD wDataSize);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool DeferDataBaseRequest(WORD wRequestID, DWORD dwContextID, VOID * pData, WORD wDataSize);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
#endif
|