| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- /*************************************************************************
- 【文件名】 OtlConnHost.h
- 【功能模块和目的】 OTL连接控制类头文件
- 【开发者及日期】 郑石诺 2015/01/09
- 【版本】 V1.0.0
- 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
- 【更改记录】
- *************************************************************************/
- #pragma once
- #ifndef DBCTRL_EXPORTS
- #define OTL_MAX_BUFF_SIZE 1024 // 字符串缓冲区最大长度
- #define OTL_MAX_TEXT_SIZE 4096 // TEXT缓冲区最大长度
- #define OTL_REG_KEY_SIZE 256 // 注册表键值最大长度
- // 数据库类型
- typedef enum tagDB_TYPE
- {
- DB_SQLServer = 0,
- DB_MySQL = 1,
- DB_Oracle = 2,
- DB_Error = 3
- } DB_TYPE;
- #define MAX_DB_DATA_BUFFER_LEN 1024 // 数据库字段最大长度
- #define WM_OTL_CONN_ESTABLISHED (WM_USER+100) // 连接建立事件
- #else
- #include "../../DBCtrl/DBCtrl.h"
- #endif
- typedef enum _OTL_CONN_STATUS
- {
- OTL_CONN_CONNECTED = 0, // 已连接
- OTL_CONN_DISCONNECTED, // 未连接
- OTL_CONN_CONNECTING, // 正在连接
- } OTL_CONN_STATUS; /* 当前数据库连接状态 */
- typedef otl_stream_read_iterator<otl_stream,otl_exception,otl_lob_stream> OtlIterator;// OTL迭代器类型
- class COtlRecordset;
- class otl_stream;
- class COtlStoredProc;
- /*************************************************************************
- 【类名】 COtlConnHost
- 【功能】 OTL连接控制类
- 【接口说明】
- 【开发者及日期】 郑石诺 2015/01/09
- 【版本】 V1.0.0
- 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
- 【更改记录】
- *************************************************************************/
- class COtlConnHost : public CWnd
- {
- DECLARE_DYNAMIC(COtlConnHost)
- private:
- otl_connect m_OtlConn; // 数据库连接对象
- OTL_CONN_STATUS m_nConnStatus; // 当前数据库连接状态
- CHAR m_szConnStr[OTL_MAX_BUFF_SIZE]; // 数据库连接字符串
- CHAR m_szLastError[OTL_MAX_BUFF_SIZE]; // 最近一次的错误信息
- CCriticalSection m_LockSection; // 监界区
- CList<CString, CString>* m_pListSQL; // SQL语句缓存区链表指针
- private:
- // 数据库连接检测线程函数
- friend static UINT ProcConnDetected(LPVOID pParam);
-
- // 启动连接检测
- void __DetectConn();
- BOOL GetRegDbInfo(LPSTR lpConnStr);
- DB_TYPE m_DbType; //当前数据库类型
- CString m_DSN;
- DB_TYPE GetDSNInfo(LPCTSTR LPstrDSN); //从注册表获取数据源所属数据库
- public:
- COtlConnHost(void);
- ~COtlConnHost(void)throw();
- private:
- CString GetStringForMySQL(LPCTSTR LPstr); // 转换字符串为MYsql数据库可以正常使用字符串,主要针对符号‘/’
- public:
- // 属性
- void SetConnStatus(OTL_CONN_STATUS nStatus) { m_nConnStatus = nStatus; }
- otl_connect& GetCurrConn() { return m_OtlConn; }
- LPCTSTR GetLastError() { return m_szLastError; }
- LPCTSTR GetConnString() { return m_szConnStr; }
- DB_TYPE GetDBType(){return m_DbType;} //获取数据库类型
- // 数据库连接控制
- BOOL Connect(); // 连接数据库(注册表中默认配置库)
- BOOL Connect(LPCTSTR lpszConnString); // 连接数据库(连接字符串中指定库)
-
- void Disconnect(); // 断开连接
- void ProcException(otl_exception& e); // 数据库操作异常处理
- BOOL TestConnect(LPCTSTR lpszConnString, LPSTR lpErrInfo); // 连接测试
- // 数据操作
- BOOL ExecCommand(LPCTSTR lpszSQL); // 直接命令执行
- void ExecComForDropTable(LPCTSTR lpszSQL); // 删除表命令执行
- BOOL InsertConstant(LPCTSTR lpszSQL); // 恒量插入(单数据)
- BOOL InsertConstantForMySQL(LPCTSTR lpszSQL); // 恒量插入(单数据)
- BOOL GetSingleDataString(LPCTSTR lpszSQL, CHAR* lpValue); // 获取字符串单值
- BOOL GetSingleDataText(LPCTSTR lpszSQL, CHAR* lpValue); // 获取Text串单值
- BOOL GetSingleDataInt(LPCTSTR lpszSQL, LONG& nValue); // 获取整型单值
-
- // 记录集操作
- BOOL InitOtlStream(LPCTSTR lpszSQL, otl_stream** pOtlStream, OtlIterator *pIterator);// 初始化记录集数据流
- BOOL IsEOF(otl_stream* pOtlStream); // 是否已遍历到记录保结尾
- BOOL GetNextDataInt(otl_stream* pOtlStream, LONG& nValue); // 获取当前记录的下一个数据(INT)
- BOOL GetNextDataString(otl_stream* pOtlStream, CHAR* lpValue, UINT nLen); // 获取当前记录的下一个数据(String)
- //迭代器操作
- BOOL MoveNextRow(OtlIterator * pIterator); //移动记录集到下一行
- BOOL GetValueInt(OtlIterator * pIterator,char *pColName,int &nValue); //获取指定字段值 整形
- BOOL GetValueString(OtlIterator * pIterator,char *pColName,char *pValue); //获取指定字段值 字符串
- BOOL GetValueText(OtlIterator * pIterator,char *pColName,char *pValue); //获取指定字段值 较大文本值
- BOOL GetValueFloat(OtlIterator * pIterator,char *pColName,float &Value); //获取指定字段值 浮点
- BOOL GetValueIntByIndex(OtlIterator * pIterator,const int pos,int &nValue); //获取指定字段值 整形 (通过索引)
- BOOL GetValueStrByIndex(OtlIterator * pIterator,const int pos,char *pValue); //获取指定字段值 字符串(通过索引)
- BOOL GetValueTextByIndex(OtlIterator * pIterator,const int pos,char *pValue); //获取指定字段值 较大文本值(通过索引)
- BOOL GetValueFloatByIndex(OtlIterator * pIterator,const int pos,float &Value); //获取指定字段值 浮点
- COtlStoredProc* CallStoredProc(const CString& a_DeclareWord); // 调用存储过程
- // 存储过程输入参数
- BOOL Input(otl_stream& a_Stream, LPCTSTR a_StrParam);
- BOOL Input(otl_stream& a_Stream, UINT a_UintParam);
- BOOL Input(otl_stream& a_Stream, int a_IntParam);
- // 存储过程返回值
- BOOL Output(otl_stream& a_Stream, UINT& a_UintReturn);
- BOOL Output(otl_stream& a_Stream, int& a_IntParam);
- BOOL Output(otl_stream& a_Stream, LPTSTR a_StrParam);
- BOOL Output(otl_stream& a_Stream, float a_floatParam);
- public:
- DECLARE_MESSAGE_MAP()
- afx_msg LRESULT OnConnEstablished(WPARAM wParam, LPARAM lParam); // 连接可用事件
- };
|