zoukankan      html  css  js  c++  java
  • 一个数据库操作类,适用于Oracle,ACCESS,SQLSERVER

     最近做了一个数据诊断的项目,里面自己写了一个数据库的操作类,包含:连接数据库、读数据表、执行SQL操作,释放数据库等组成,希望对大家有用,由于水平有限,若有错误或者代码不足地方欢迎指正,谢谢。

    ADOOperate.H

    [cpp] view plaincopy
     
    1. //////////////////////////////////////////////////////////////////////  
    2. // 类功能:用于数据库的操作 主要实现 连接数据库 读数据表 检查数据表 执行SQL语句  
    3. //  
    4. // 孙高朝  2010.03.25  
    5. //////////////////////////////////////////////////////////////////////  
    6. #if !defined(AFX_ADOOPERATE_H__EB4AC016_15D4_46E9_A754_E1C1A036DAAE__INCLUDED_)  
    7. #define AFX_ADOOPERATE_H__EB4AC016_15D4_46E9_A754_E1C1A036DAAE__INCLUDED_  
    8. #if _MSC_VER > 1000  
    9. #pragma once  
    10. #endif // _MSC_VER > 1000  
    11. #include "stdafx.h"  
    12. class CADOOperate    
    13. {     
    14. public:  
    15.     CString m_DataSource;   // 数据源  
    16.     CString m_PassWord;     // 密码  
    17.     CString m_UserName;     // 数据库名  
    18.     _ConnectionPtr  m_pConn;    // ADO连接  
    19.     CString strTableName;       // 表名 外边传入  
    20.     _RecordsetPtr   m_pRst;     // 记录集  
    21. public:   
    22.     BOOL funCheckTable(CString strName,CString strDBType);  
    23.     BOOL ExecuteSQL(CString strSQL,LPCSTR strDBType = ORACLE);  
    24.     _RecordsetPtr& ReadTable(LPCSTR strSQL1 = NULL,LPCSTR strDBType = ORACLE);  // 读表 返回记录集  
    25.     BOOL OpenDataBase(CString lpDBType);        // 连接数据库  
    26.     void ExitADO();  
    27.     CADOOperate();  
    28.     virtual ~CADOOperate();  
    29. };  
    30. #endif // !defined(AFX_ADOOPERATE_H__EB4AC016_15D4_46E9_A754_E1C1A036DAAE__INCLUDED_)  

    ADOOperate.C

    [cpp] view plaincopy
     
    1. // ADOOperate.cpp: implementation of the CADOOperate class.  
    2. //  
    3. //////////////////////////////////////////////////////////////////////  
    4. #include "stdafx.h"  
    5. #include "ADOOperate.h"  
    6. #include "h_Const.h"  
    7. #include "ShareFun.h"  
    8. #include "FileLog.h"  
    9. //////////////////////////////////////////////////////////////////////  
    10. // Construction/Destruction  
    11. //////////////////////////////////////////////////////////////////////  
    12. CADOOperate::CADOOperate()  
    13. {  
    14.     strTableName = " "// 初始化表名  
    15.     m_DataSource = " "// 数据源  
    16.     m_PassWord = " ";   // 密码  
    17.     m_UserName = " ";   // 数据库名  
    18. }  
    19. CADOOperate::~CADOOperate()  
    20. {  
    21. }  
    22. //*********************************************  
    23. //  
    24. // 函数功能:    连接数据库  
    25. // 参数:      CString     字符串  
    26. // 返回值:     TRUE: 连接成功      FALSE:连接失败  
    27. // 作者:      孙高朝     2010.03.24  
    28. //  
    29. //*********************************************  
    30. BOOL CADOOperate::OpenDataBase(CString strDBType)  
    31. {  
    32.     CString strSQL;  
    33.     CShareFun myFun;  
    34.     // 选择数据库连接语句  
    35.     if (strDBType == ACCESS)    // ACCESS  
    36.     {  
    37.         CString strPath;  
    38.         strPath = myFun.funGetPath();  
    39.         strSQL = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strPath + "MobileDB.mdb;Persist Security Info=False";  
    40.     }   
    41.     else if (strDBType == SQLSERVER)    // SQL SERVER  
    42.     {  
    43.          strSQL = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=BookManage" ;  
    44.     }   
    45.     else if (strDBType == ORACLE)   // 默认为ORACLE  
    46.     {  
    47.         // 读取ADO.INI的文件  
    48.         m_DataSource = myFun.funReadini(DATASOURCE);  
    49.         m_UserName = myFun.funReadini(USERNAME);  
    50.         m_PassWord = myFun.funReadini(PASSWORD);  
    51.         strSQL = "Provider=MSDAORA.1;Password=" + (CString)m_PassWord + ";User ID=" + (CString)m_UserName   
    52.              + ";Data Source=" + (CString)m_DataSource + ";Persist Security Info=True";     // 数据库连接语句  
    53.     }  
    54.       
    55.     CoInitialize(NULL); // 初始化COM库  
    56.       
    57.     try  
    58.     {  
    59.         m_pConn.CreateInstance(__uuidof(Connection));   // 连接指针  
    60.         m_pConn->ConnectionString = (_bstr_t)strSQL;  
    61.         m_pConn->Open("","","",NULL);  
    62.     }  
    63.     catch (_com_error)  // 连接出错处理  
    64.     {     
    65.         MessageBox(0,strDBType + "连接数据库错误","提示",MB_OK|MB_ICONINFORMATION);  
    66.         return false;  
    67.     }  
    68.     catch (...)  
    69.     {  
    70.         AfxMessageBox("SYS Error");  
    71.         return false;  
    72.     }  
    73.     return true;  
    74. }  
    75. //*********************************************  
    76. //  
    77. // 函数功能:    读取数据库表  
    78. // 参数:      CString     字符串  
    79. // 返回值:     返回记录集数  
    80. // 作者:      孙高朝     2010.03.24  
    81. //  
    82. //*********************************************  
    83. _RecordsetPtr&  CADOOperate::ReadTable(LPCSTR strSQL1,LPCSTR strDBType)  
    84. {  
    85.     CString strSQL;  
    86.     CString strSQL2;  
    87.     CFileLog myFile;  
    88.     strSQL2 = strSQL1;  
    89.     strSQL = "SELECT * FROM " + strTableName ;  
    90.       
    91.     if(strSQL2.GetLength() > 0)  
    92.     {  
    93.         strSQL = "SELECT * FROM " + strTableName + " WHERE " + strSQL1;   
    94.     }  
    95.       
    96.     try  
    97.     {  
    98.         if(m_pConn==NULL)       // 判断连接是否断开  
    99.            OpenDataBase(strDBType);     // 重新连接  
    100.         m_pRst.CreateInstance(__uuidof(Recordset));     // 数据集指针  
    101.         m_pRst->raw_Close(); // 关闭记录集  
    102.         m_pRst->Open((_bstr_t)strSQL,m_pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);  
    103.     }  
    104.     catch(_com_error e)  
    105.     {  
    106.         myFile.WriteToLog(ErrorFileName,"CADOOperate ReadTable()",(LPCSTR)e.Description());  
    107.     }  
    108.     return m_pRst;  // 返回记录集  
    109. }  
    110. //*********************************************  
    111. //  
    112. // 函数功能:    ADO释放函数  
    113. // 参数:        
    114. // 返回值:       
    115. // 作者:      孙高朝     2010.03.29  
    116. //  
    117. //*********************************************  
    118. void CADOOperate::ExitADO()  
    119. {  
    120.     if(m_pRst->State)  
    121.     {  
    122.         m_pRst->Close();  
    123.     }  
    124.     m_pRst = NULL;  
    125.     if (m_pConn->State)  
    126.     {  
    127.         m_pConn->Close();  
    128.     }  
    129.     m_pConn = NULL;  
    130.     //  错误说明:智能指针_RecordsetPtr和_ConnectionPtr在超出作用域是会自动释放的,  
    131.     //  也就是说指针在CreateInstance()的时候分配内存,在作用域外释放,  
    132.     //  所以自己调用Release()并不是必需的,不过调用有可能出错,而设为NULL是完全可以不用的。   
    133.     //  m_pConn->Release();  
    134.     CoUninitialize();   // 卸载COM库  
    135. }  
    136. //*********************************************  
    137. //  
    138. // 函数功能:    执行数据库操作  
    139. // 参数:      LPCSTR      字符串指针  
    140. // 返回值:     返回记录集数  
    141. // 作者:      孙高朝     2010.03.29  
    142. //  
    143. //*********************************************  
    144. BOOL CADOOperate::ExecuteSQL(CString strSQL,LPCSTR strDBType)  
    145. {     
    146.     try  
    147.     {  
    148.         if(m_pConn==NULL)       // 判断连接是否断开  
    149.             OpenDataBase(strDBType);        // 重新连接  
    150.           
    151.         m_pRst.CreateInstance(__uuidof(Recordset));     // 数据集指针  
    152.         m_pRst->raw_Close(); // 关闭记录集  
    153.         m_pRst->Open((_bstr_t)strSQL,m_pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);  
    154.     }  
    155.     catch(_com_error e)  
    156.     {  
    157.         e.Description();  
    158.         return FALSE;  
    159.     }  
    160.       
    161.     return TRUE;    // 返回记录集  
    162. }  
    163. //*********************************************  
    164. //  
    165. // 函数功能:    检查数据库是否存在该表  
    166. // 参数:      LPCSTR      字符串指针  
    167. // 返回值:     返回TRUE OR FALSE  
    168. // 作者:      孙高朝     2010.03.29  
    169. //  
    170. //*********************************************  
    171. BOOL CADOOperate::funCheckTable(CString strName,CString strDBType)  
    172. {  
    173.     CString strSQL;  
    174.     // 选择数据库连接语句  
    175.     if (strDBType == ACCESS)    // ACCESS  
    176.     {  
    177.         strSQL = "SELECT * FROM MSysObjects WHERE Name = '" + strName + "'";    // 表名强制为大写, 判断是否存在    
    178.     }   
    179.     else if (strDBType == SQLSERVER)    // SQL SERVER  
    180.     {  
    181.         strSQL = " " ;  
    182.     }   
    183.     else if (strDBType == ORACLE)   // ORACLE  
    184.     {  
    185.         strSQL = "SELECT Table_Name FROM Tabs WHERE Table_Name='" + strName + "'";  // 表名强制为大写, 判断是否存在  
    186.     }  
    187.     try  
    188.     {  
    189.         if(m_pConn==NULL)       // 判断连接是否断开  
    190.             OpenDataBase(ORACLE);       // 重新连接  
    191.           
    192.         m_pRst.CreateInstance(__uuidof(Recordset));     // 数据集指针  
    193.         m_pRst->raw_Close(); // 关闭记录集  
    194.         m_pRst->Open((_bstr_t)strSQL,m_pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);  
    195.     }  
    196.     catch(_com_error e)  
    197.     {  
    198.         e.Description();  
    199.         return FALSE;  
    200.     }  
    201.     // 存在表否  
    202.     if (m_pRst->adoEOF)  
    203.     {  
    204.         return FALSE;  
    205.     }  
    206.     return TRUE;  
    207. }  
  • 相关阅读:
    15、集合--TreeSet的源码分析(待完成)
    13、集合--HashSet相关方法源码解析(等map更新完成之后在进行补充)
    11、集合--Set接口
    10、集合--Set、AbstractSet、HashSet、TreeSet、SortedSet源码
    9、集合--ArrayList和LinkedList的一些对比
    8、集合--LinkedList的测试以及相关方法的源码分析
    7、集合--ArrayList的测试以及相关方法的源码解析
    6、集合--List接口
    Linux 高可用(HA)集群之keepalived详解
    CentOS7安装配置redis-3.0.0
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/3754489.html
Copyright © 2011-2022 走看看