Files
wnmj/Servers/服务器组件/内核引擎/DataBase.h
2026-02-13 14:34:15 +08:00

281 lines
6.8 KiB
C++

#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"
#include <vector>
using namespace std;
//////////////////////////////////////////////////////////////////////////
//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, LPSTR szBuffer, UINT uSize);
//获取参数
virtual bool GetFieldValue(LPCTSTR lpFieldName, LPWSTR szBuffer, UINT uSize);
//获取参数
virtual bool GetFieldValue(LPCTSTR lpFieldName, COleDateTime & Time);
//获取参数
virtual bool GetFieldValue(LPCTSTR lpFieldName, bool & bValue);
//获取参数
virtual bool GetFieldValue(LPCTSTR lpFieldName, BYTE* pData, UINT& uSize);
//命令对象接口
public:
//插入参数
virtual void AddParameter(LPCTSTR pszName, DataTypeEnum Type, 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);
//设置错误
void SetErrorInfo(enSQLException enErrorType, LPCTSTR pszDescribe);
};
//////////////////////////////////////////////////////////////////////////
//数据库管理类
class CDataBaseEngine : public IDataBaseEngine, public IQueueServiceSink
{
//内核变量
protected:
bool m_bService; //运行标志
CQueueServiceEvent m_QueueServiceEvent; //队列对象
//IDataBaseEngineSink * m_pIDataBaseEngineSink; //通知钩子
vector<IDataBaseEngineSink *> m_pIDataBaseEngineSinks; //通知钩子
//函数定义
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);
//配置接口
public:
//配置模块
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