/************************************************************* /* Copyright (C), 2014-2020, lyfz. Co., Ltd. /* 文件名: AdoImpl.h /* 作者: Jeff.w /* 创建日期: 2014-08-16 /* 版本号: V1.0 /* 描述: 核心层底,数据库ADO编程 /* 其它: /* 主要类模块: /* 历史修改记录: /* 作者 时间 版本 描述 /* Jeff.w 14/08/18 1.0 创建这个模块 ***************************************************************/ #ifndef __ADO_IMPL_HEADER__ #define __ADO_IMPL_HEADER__ #pragma once //#include //随存随取,使用vector比较好; #include using namespace std; #include "..\..\..\AdoImpl\AdoDef.h" #include "..\..\..\AdoImpl\ADODatabase.h" #include "..\..\..\AdoImpl\ADORecordset.h" #include "..\..\..\AdoImpl\ADOCommand.h" class CDataBase; // Jeff.一个数据库只有一个AdoImpl实例; // 该类使用线程,监测线程的作用是判断数据库是否断开并重连; // 未对二进制文件支持操作; typedef struct __ST_DATABASEINFO__ { //TCHAR szProvider[MAX_PATH]; // 数据库引擎; TCHAR szDataSource[MAX_PATH]; // 数据库源地址; TCHAR szDatabaseTCPPort[MAX_PATH]; // 数据库TCP端口; TCHAR szDatabaseAccount[MAX_PATH]; // 数据库登录账户; TCHAR szDatabasePassword[MAX_PATH]; // 数据库账户密码; TCHAR szDatabaseName[MAX_PATH]; // 数据库名称; Initial Catalog TCHAR szDatabaseFile[MAX_PATH]; // 数据库文件; 用于Access之类的桌面数据库,不用于网络; __ST_DATABASEINFO__() { memset(szDataSource,0,sizeof(TCHAR)*MAX_PATH); memset(szDatabaseTCPPort,0,sizeof(TCHAR)*MAX_PATH); memset(szDatabaseAccount,0,sizeof(TCHAR)*MAX_PATH); memset(szDatabasePassword,0,sizeof(TCHAR)*MAX_PATH); memset(szDatabaseName,0,sizeof(TCHAR)*MAX_PATH); memset(szDatabaseFile,0,sizeof(TCHAR)*MAX_PATH); } }STDatabaseInfo,*pSTDatabaseInfo; class AdoImpl { public: AdoImpl(void); virtual ~AdoImpl(void); void dump_com_error(_com_error &e); void SetConnectString(IN const int &nType,IN const STDatabaseInfo &tagSTDatabaseInfo); bool opendatabase(IN const TCHAR *pConnectString=NULL); void closedatabase(); int Execute(TCHAR *pSQL);//不返回记录集; bool GetADODateBaseStatus(); CADODatabase *GetAdoDatabase(){return m_pADODatabase;}; bool OpenADORecordSet(CADORecordset *pRSet,const TCHAR *pSQL); void CloseADORecordSet(CADORecordset* pRSet); void DeleteADORecordSet(CADORecordset* pRSet); inline CString GetQuery() {return m_strQuery;}; inline void SetQuery(LPCSTR strQuery) {m_strQuery = strQuery;}; public: /*----------------------------------------操作数据 begin----------------------------------------------*/ int GetFieldValueList(__in const TCHAR *pTableName ,__in const TCHAR *pFilters, __in const TCHAR *pSql, __out INT &nFieldCount, __out vector& vtRet); // 此函数不支持2进制文件的select; int GetFieldValueList(__in const TCHAR *pTableName ,__in const TCHAR *pSql, __out int &nFieldCount, __out CArray& strArray); DWORD GetTableRecordCount(IN LPCTSTR lpTableName, IN LPCTSTR lpFilters); // 返回要查询的表的记录数; int InsertIntoTable(__in vector& vtValues); /*----------------------------------------操作数据 end----------------------------------------------*/ public: CRITICAL_SECTION m_csAdo; TCHAR m_szConnectString[1024];// 暂使用1024魔数,后期升级再定义; CADODatabase *m_pADODatabase; CString m_strQuery; CString m_strLastError; DWORD m_dwLastError; }; #endif