AdoImplSvr.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /*************************************************************
  2. /* Copyright (C), 2014-2020, lyfz. Co., Ltd.
  3. /* 文件名: AdoImpl.h
  4. /* 作者: Jeff.w
  5. /* 创建日期: 2014-08-16
  6. /* 版本号: V1.0
  7. /* 描述: 核心层底,数据库ADO编程
  8. /* 其它:
  9. /* 主要类模块:
  10. /* 历史修改记录:
  11. /* 作者 时间 版本 描述
  12. /* Jeff.w 14/08/18 1.0 创建这个模块
  13. ***************************************************************/
  14. #ifndef __ADO_IMPL_HEADER__
  15. #define __ADO_IMPL_HEADER__
  16. #pragma once
  17. //#include <list>//随存随取,使用vector比较好;
  18. #include <vector>
  19. using namespace std;
  20. #include "..\..\..\AdoImpl\AdoDef.h"
  21. #include "..\..\..\AdoImpl\ADODatabase.h"
  22. #include "..\..\..\AdoImpl\ADORecordset.h"
  23. #include "..\..\..\AdoImpl\ADOCommand.h"
  24. class CDataBase;
  25. // Jeff.一个数据库只有一个AdoImpl实例;
  26. // 该类使用线程,监测线程的作用是判断数据库是否断开并重连;
  27. // 未对二进制文件支持操作;
  28. typedef struct __ST_DATABASEINFO__
  29. {
  30. //TCHAR szProvider[MAX_PATH]; // 数据库引擎;
  31. TCHAR szDataSource[MAX_PATH]; // 数据库源地址;
  32. TCHAR szDatabaseTCPPort[MAX_PATH]; // 数据库TCP端口;
  33. TCHAR szDatabaseAccount[MAX_PATH]; // 数据库登录账户;
  34. TCHAR szDatabasePassword[MAX_PATH]; // 数据库账户密码;
  35. TCHAR szDatabaseName[MAX_PATH]; // 数据库名称; Initial Catalog
  36. TCHAR szDatabaseFile[MAX_PATH]; // 数据库文件; 用于Access之类的桌面数据库,不用于网络;
  37. __ST_DATABASEINFO__()
  38. {
  39. memset(szDataSource,0,sizeof(TCHAR)*MAX_PATH);
  40. memset(szDatabaseTCPPort,0,sizeof(TCHAR)*MAX_PATH);
  41. memset(szDatabaseAccount,0,sizeof(TCHAR)*MAX_PATH);
  42. memset(szDatabasePassword,0,sizeof(TCHAR)*MAX_PATH);
  43. memset(szDatabaseName,0,sizeof(TCHAR)*MAX_PATH);
  44. memset(szDatabaseFile,0,sizeof(TCHAR)*MAX_PATH);
  45. }
  46. }STDatabaseInfo,*pSTDatabaseInfo;
  47. class AdoImpl
  48. {
  49. public:
  50. AdoImpl(void);
  51. virtual ~AdoImpl(void);
  52. void dump_com_error(_com_error &e);
  53. void SetConnectString(IN const int &nType,IN const STDatabaseInfo &tagSTDatabaseInfo);
  54. bool opendatabase(IN const TCHAR *pConnectString=NULL);
  55. void closedatabase();
  56. int Execute(TCHAR *pSQL);//不返回记录集;
  57. bool GetADODateBaseStatus();
  58. CADODatabase *GetAdoDatabase(){return m_pADODatabase;};
  59. bool OpenADORecordSet(CADORecordset *pRSet,const TCHAR *pSQL);
  60. void CloseADORecordSet(CADORecordset* pRSet);
  61. void DeleteADORecordSet(CADORecordset* pRSet);
  62. inline CString GetQuery() {return m_strQuery;};
  63. inline void SetQuery(LPCSTR strQuery) {m_strQuery = strQuery;};
  64. public:
  65. /*----------------------------------------操作数据 begin----------------------------------------------*/
  66. int GetFieldValueList(__in const TCHAR *pTableName ,__in const TCHAR *pFilters, __in const TCHAR *pSql, __out INT &nFieldCount, __out vector<TString>& vtRet); // 此函数不支持2进制文件的select;
  67. int GetFieldValueList(__in const TCHAR *pTableName ,__in const TCHAR *pSql, __out int &nFieldCount, __out CArray<CStringArray,CStringArray>& strArray);
  68. DWORD GetTableRecordCount(IN LPCTSTR lpTableName, IN LPCTSTR lpFilters); // 返回要查询的表的记录数;
  69. int InsertIntoTable(__in vector<CDataBase*>& vtValues);
  70. /*----------------------------------------操作数据 end----------------------------------------------*/
  71. public:
  72. CRITICAL_SECTION m_csAdo;
  73. TCHAR m_szConnectString[1024];// 暂使用1024魔数,后期升级再定义;
  74. CADODatabase *m_pADODatabase;
  75. CString m_strQuery;
  76. CString m_strLastError;
  77. DWORD m_dwLastError;
  78. };
  79. #endif