多数据源中间件标准版1.0

OtlConnHost.h 5.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. /*************************************************************************
  2. 【文件名】 OtlConnHost.h
  3. 【功能模块和目的】 OTL连接控制类头文件
  4. 【开发者及日期】 郑石诺 2015/01/09
  5. 【版本】 V1.0.0
  6. 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
  7. 【更改记录】
  8. *************************************************************************/
  9. #pragma once
  10. #ifndef DBCTRL_EXPORTS
  11. #define OTL_MAX_BUFF_SIZE 1024 // 字符串缓冲区最大长度
  12. #define OTL_MAX_TEXT_SIZE 4096 // TEXT缓冲区最大长度
  13. #define OTL_REG_KEY_SIZE 256 // 注册表键值最大长度
  14. // 数据库类型
  15. typedef enum tagDB_TYPE
  16. {
  17. DB_SQLServer = 0,
  18. DB_MySQL = 1,
  19. DB_Oracle = 2,
  20. DB_Error = 3
  21. } DB_TYPE;
  22. #define MAX_DB_DATA_BUFFER_LEN 1024 // 数据库字段最大长度
  23. #define WM_OTL_CONN_ESTABLISHED (WM_USER+100) // 连接建立事件
  24. #else
  25. #include "../../DBCtrl/DBCtrl.h"
  26. #endif
  27. typedef enum _OTL_CONN_STATUS
  28. {
  29. OTL_CONN_CONNECTED = 0, // 已连接
  30. OTL_CONN_DISCONNECTED, // 未连接
  31. OTL_CONN_CONNECTING, // 正在连接
  32. } OTL_CONN_STATUS; /* 当前数据库连接状态 */
  33. typedef otl_stream_read_iterator<otl_stream,otl_exception,otl_lob_stream> OtlIterator;// OTL迭代器类型
  34. class COtlRecordset;
  35. class otl_stream;
  36. class COtlStoredProc;
  37. /*************************************************************************
  38. 【类名】 COtlConnHost
  39. 【功能】 OTL连接控制类
  40. 【接口说明】
  41. 【开发者及日期】 郑石诺 2015/01/09
  42. 【版本】 V1.0.0
  43. 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
  44. 【更改记录】
  45. *************************************************************************/
  46. class COtlConnHost : public CWnd
  47. {
  48. DECLARE_DYNAMIC(COtlConnHost)
  49. private:
  50. otl_connect m_OtlConn; // 数据库连接对象
  51. OTL_CONN_STATUS m_nConnStatus; // 当前数据库连接状态
  52. CHAR m_szConnStr[OTL_MAX_BUFF_SIZE]; // 数据库连接字符串
  53. CHAR m_szLastError[OTL_MAX_BUFF_SIZE]; // 最近一次的错误信息
  54. CCriticalSection m_LockSection; // 监界区
  55. CList<CString, CString>* m_pListSQL; // SQL语句缓存区链表指针
  56. private:
  57. // 数据库连接检测线程函数
  58. friend static UINT ProcConnDetected(LPVOID pParam);
  59. // 启动连接检测
  60. void __DetectConn();
  61. BOOL GetRegDbInfo(LPSTR lpConnStr);
  62. DB_TYPE m_DbType; //当前数据库类型
  63. CString m_DSN;
  64. DB_TYPE GetDSNInfo(LPCTSTR LPstrDSN); //从注册表获取数据源所属数据库
  65. public:
  66. COtlConnHost(void);
  67. ~COtlConnHost(void)throw();
  68. private:
  69. CString GetStringForMySQL(LPCTSTR LPstr); // 转换字符串为MYsql数据库可以正常使用字符串,主要针对符号‘/’
  70. public:
  71. // 属性
  72. void SetConnStatus(OTL_CONN_STATUS nStatus) { m_nConnStatus = nStatus; }
  73. otl_connect& GetCurrConn() { return m_OtlConn; }
  74. LPCTSTR GetLastError() { return m_szLastError; }
  75. LPCTSTR GetConnString() { return m_szConnStr; }
  76. DB_TYPE GetDBType(){return m_DbType;} //获取数据库类型
  77. // 数据库连接控制
  78. BOOL Connect(); // 连接数据库(注册表中默认配置库)
  79. BOOL Connect(LPCTSTR lpszConnString); // 连接数据库(连接字符串中指定库)
  80. void Disconnect(); // 断开连接
  81. void ProcException(otl_exception& e); // 数据库操作异常处理
  82. BOOL TestConnect(LPCTSTR lpszConnString, LPSTR lpErrInfo); // 连接测试
  83. // 数据操作
  84. BOOL ExecCommand(LPCTSTR lpszSQL); // 直接命令执行
  85. void ExecComForDropTable(LPCTSTR lpszSQL); // 删除表命令执行
  86. BOOL InsertConstant(LPCTSTR lpszSQL); // 恒量插入(单数据)
  87. BOOL InsertConstantForMySQL(LPCTSTR lpszSQL); // 恒量插入(单数据)
  88. BOOL GetSingleDataString(LPCTSTR lpszSQL, CHAR* lpValue); // 获取字符串单值
  89. BOOL GetSingleDataText(LPCTSTR lpszSQL, CHAR* lpValue); // 获取Text串单值
  90. BOOL GetSingleDataInt(LPCTSTR lpszSQL, LONG& nValue); // 获取整型单值
  91. // 记录集操作
  92. BOOL InitOtlStream(LPCTSTR lpszSQL, otl_stream** pOtlStream, OtlIterator *pIterator);// 初始化记录集数据流
  93. BOOL IsEOF(otl_stream* pOtlStream); // 是否已遍历到记录保结尾
  94. BOOL GetNextDataInt(otl_stream* pOtlStream, LONG& nValue); // 获取当前记录的下一个数据(INT)
  95. BOOL GetNextDataString(otl_stream* pOtlStream, CHAR* lpValue, UINT nLen); // 获取当前记录的下一个数据(String)
  96. //迭代器操作
  97. BOOL MoveNextRow(OtlIterator * pIterator); //移动记录集到下一行
  98. BOOL GetValueInt(OtlIterator * pIterator,char *pColName,int &nValue); //获取指定字段值 整形
  99. BOOL GetValueString(OtlIterator * pIterator,char *pColName,char *pValue); //获取指定字段值 字符串
  100. BOOL GetValueText(OtlIterator * pIterator,char *pColName,char *pValue); //获取指定字段值 较大文本值
  101. BOOL GetValueFloat(OtlIterator * pIterator,char *pColName,float &Value); //获取指定字段值 浮点
  102. BOOL GetValueIntByIndex(OtlIterator * pIterator,const int pos,int &nValue); //获取指定字段值 整形 (通过索引)
  103. BOOL GetValueStrByIndex(OtlIterator * pIterator,const int pos,char *pValue); //获取指定字段值 字符串(通过索引)
  104. BOOL GetValueTextByIndex(OtlIterator * pIterator,const int pos,char *pValue); //获取指定字段值 较大文本值(通过索引)
  105. BOOL GetValueFloatByIndex(OtlIterator * pIterator,const int pos,float &Value); //获取指定字段值 浮点
  106. COtlStoredProc* CallStoredProc(const CString& a_DeclareWord); // 调用存储过程
  107. // 存储过程输入参数
  108. BOOL Input(otl_stream& a_Stream, LPCTSTR a_StrParam);
  109. BOOL Input(otl_stream& a_Stream, UINT a_UintParam);
  110. BOOL Input(otl_stream& a_Stream, int a_IntParam);
  111. // 存储过程返回值
  112. BOOL Output(otl_stream& a_Stream, UINT& a_UintReturn);
  113. BOOL Output(otl_stream& a_Stream, int& a_IntParam);
  114. BOOL Output(otl_stream& a_Stream, LPTSTR a_StrParam);
  115. BOOL Output(otl_stream& a_Stream, float a_floatParam);
  116. public:
  117. DECLARE_MESSAGE_MAP()
  118. afx_msg LRESULT OnConnEstablished(WPARAM wParam, LPARAM lParam); // 连接可用事件
  119. };