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

ADOOperate.H

  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

  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. CoInitialize(NULL); // 初始化COM库
  55. try
  56. {
  57. m_pConn.CreateInstance(__uuidof(Connection));   // 连接指针
  58. m_pConn->ConnectionString = (_bstr_t)strSQL;
  59. m_pConn->Open("","","",NULL);
  60. }
  61. catch (_com_error)  // 连接出错处理
  62. {
  63. MessageBox(0,strDBType + "连接数据库错误","提示",MB_OK|MB_ICONINFORMATION);
  64. return false;
  65. }
  66. catch (...)
  67. {
  68. AfxMessageBox("SYS Error");
  69. return false;
  70. }
  71. return true;
  72. }
  73. //*********************************************
  74. //
  75. // 函数功能:    读取数据库表
  76. // 参数:      CString     字符串
  77. // 返回值:     返回记录集数
  78. // 作者:      孙高朝     2010.03.24
  79. //
  80. //*********************************************
  81. _RecordsetPtr&  CADOOperate::ReadTable(LPCSTR strSQL1,LPCSTR strDBType)
  82. {
  83. CString strSQL;
  84. CString strSQL2;
  85. CFileLog myFile;
  86. strSQL2 = strSQL1;
  87. strSQL = "SELECT * FROM " + strTableName ;
  88. if(strSQL2.GetLength() > 0)
  89. {
  90. strSQL = "SELECT * FROM " + strTableName + " WHERE " + strSQL1;
  91. }
  92. try
  93. {
  94. if(m_pConn==NULL)       // 判断连接是否断开
  95. OpenDataBase(strDBType);     // 重新连接
  96. m_pRst.CreateInstance(__uuidof(Recordset));     // 数据集指针
  97. m_pRst->raw_Close(); // 关闭记录集
  98. m_pRst->Open((_bstr_t)strSQL,m_pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
  99. }
  100. catch(_com_error e)
  101. {
  102. myFile.WriteToLog(ErrorFileName,"CADOOperate ReadTable()",(LPCSTR)e.Description());
  103. }
  104. return m_pRst;  // 返回记录集
  105. }
  106. //*********************************************
  107. //
  108. // 函数功能:    ADO释放函数
  109. // 参数:
  110. // 返回值:
  111. // 作者:      孙高朝     2010.03.29
  112. //
  113. //*********************************************
  114. void CADOOperate::ExitADO()
  115. {
  116. if(m_pRst->State)
  117. {
  118. m_pRst->Close();
  119. }
  120. m_pRst = NULL;
  121. if (m_pConn->State)
  122. {
  123. m_pConn->Close();
  124. }
  125. m_pConn = NULL;
  126. //  错误说明:智能指针_RecordsetPtr和_ConnectionPtr在超出作用域是会自动释放的,
  127. //  也就是说指针在CreateInstance()的时候分配内存,在作用域外释放,
  128. //  所以自己调用Release()并不是必需的,不过调用有可能出错,而设为NULL是完全可以不用的。
  129. //  m_pConn->Release();
  130. CoUninitialize();   // 卸载COM库
  131. }
  132. //*********************************************
  133. //
  134. // 函数功能:    执行数据库操作
  135. // 参数:      LPCSTR      字符串指针
  136. // 返回值:     返回记录集数
  137. // 作者:      孙高朝     2010.03.29
  138. //
  139. //*********************************************
  140. BOOL CADOOperate::ExecuteSQL(CString strSQL,LPCSTR strDBType)
  141. {
  142. try
  143. {
  144. if(m_pConn==NULL)       // 判断连接是否断开
  145. OpenDataBase(strDBType);        // 重新连接
  146. m_pRst.CreateInstance(__uuidof(Recordset));     // 数据集指针
  147. m_pRst->raw_Close(); // 关闭记录集
  148. m_pRst->Open((_bstr_t)strSQL,m_pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
  149. }
  150. catch(_com_error e)
  151. {
  152. e.Description();
  153. return FALSE;
  154. }
  155. return TRUE;    // 返回记录集
  156. }
  157. //*********************************************
  158. //
  159. // 函数功能:    检查数据库是否存在该表
  160. // 参数:      LPCSTR      字符串指针
  161. // 返回值:     返回TRUE OR FALSE
  162. // 作者:      孙高朝     2010.03.29
  163. //
  164. //*********************************************
  165. BOOL CADOOperate::funCheckTable(CString strName,CString strDBType)
  166. {
  167. CString strSQL;
  168. // 选择数据库连接语句
  169. if (strDBType == ACCESS)    // ACCESS
  170. {
  171. strSQL = "SELECT * FROM MSysObjects WHERE Name = '" + strName + "'";    // 表名强制为大写, 判断是否存在
  172. }
  173. else if (strDBType == SQLSERVER)    // SQL SERVER
  174. {
  175. strSQL = " " ;
  176. }
  177. else if (strDBType == ORACLE)   // ORACLE
  178. {
  179. strSQL = "SELECT Table_Name FROM Tabs WHERE Table_Name='" + strName + "'";  // 表名强制为大写, 判断是否存在
  180. }
  181. try
  182. {
  183. if(m_pConn==NULL)       // 判断连接是否断开
  184. OpenDataBase(ORACLE);       // 重新连接
  185. m_pRst.CreateInstance(__uuidof(Recordset));     // 数据集指针
  186. m_pRst->raw_Close(); // 关闭记录集
  187. m_pRst->Open((_bstr_t)strSQL,m_pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
  188. }
  189. catch(_com_error e)
  190. {
  191. e.Description();
  192. return FALSE;
  193. }
  194. // 存在表否
  195. if (m_pRst->adoEOF)
  196. {
  197. return FALSE;
  198. }
  199. return TRUE;
  200. }

一个数据库操作类,适用于Oracle,ACCESS,SQLSERVER的更多相关文章

  1. 51)PHP,一个数据库操作类的代码

    <?php //类名,也习惯上(推荐)使用跟文件名相似的名字 //定义一个mysql连接类,该类可以连接mysql数据库 //并实现其单例模式 //该类的功能还能够完成如下基本mysql操作: ...

  2. Android打造属于自己的数据库操作类。

    1.概述 开发Android的同学都知道sdk已经为我们提供了一个SQLiteOpenHelper类来创建和管理SQLite数据库,通过写一个子类去继承它,就可以方便的创建.管理数据库.但是当我们需要 ...

  3. Oracle数据库操作类及连接方法

    创建DataBaseAccess引用库下面包括DBConnectionString.cs,DBType.cs ,SysName.cs 三个类 DBConnectionString: using Sys ...

  4. C# Oracle数据库操作类实例详解

    本文所述为C#实现的Oracle数据库操作类,可执行超多常用的Oracle数据库操作,包含了基础数据库连接.关闭连接.输出记录集.执行Sql语句,返回带分页功能的dataset .取表里字段的类型和长 ...

  5. (转)C# Oracle数据库操作类

    原文地址:http://www.cnblogs.com/haibing0107/p/6143922.html using System;using System.Data;using System.C ...

  6. C# Oracle数据库操作类

    using System; using System.Data; using System.Collections.Generic; using System.Configuration; using ...

  7. 一个基于PDO的数据库操作类(新) 一个PDO事务实例

    <?php /* * 作者:胡睿 * 日期:2011/03/19 * 电邮:hooray0905@foxmail.com * * 20110319 * 常用数据库操作,如:增删改查,获取单条记录 ...

  8. Microsoft Access数据库操作类(C#)

    博文介绍的Microsoft Access数据库操作类是C#语言的,可实现对Microsoft Access数据库的增删改查询等操作.并且该操作类可实现对图片的存储,博文的最后附上如何将Image图片 ...

  9. 【知识必备】ezSQL,最好用的数据库操作类,让php操作sql更简单~

    最近用php做了点小东东,用上了ezSQL,感觉真的很ez,所以拿来跟大家分享一下~ ezSQL是一个非常好用的PHP数据库操作类.著名的开源博客WordPress的数据库操作就使用了ezSQL的My ...

随机推荐

  1. Java 之 Map 接口

    一.Map 接口概述 java.util.Map 接口专门用来存放键值对这种对象关系的对象. 下面比较一下 Collection 与 Map 的区别: Collection 中的集合,元素是孤立存在的 ...

  2. Java Socket编程----网络基础

    详见:https://www.cnblogs.com/rocomp/p/4790340.html Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而 ...

  3. fastadmin 中 a标签跳转

    <a class="btn-addtabs" href="/入口文件/模块/控制器"></a>

  4. 【转】Linux编译链接问题----静态库和动态库

    Linux静态库和动态库的命名规则 静态函数库 静态库的名字一般是libxxx.a,利用静态库编译生成的文件比较大,因为整个静态库所有的数据都会被整合进目标代码中. a) 优点: 编译后,可执行文件不 ...

  5. COM_STMT_PREPARE 1

    mysqld_stmt_prepare void mysqld_stmt_prepare(THD* thd, const char * query, uint length, Prepared_sta ...

  6. jajx 传参 需要 判断的 条件

    1.有没有权限. 2.数据类型 对不对 例如 id ,page  传过来时是str 类型, view中处理时需要转换成 int类型. 如果 不能转 就会报错.. 3.查询数据.数据不存在也要报错... ...

  7. 本地开发的jar包放到本地maven仓库

    mvn install:install-file -Dfile=C:\Users\Administrator\Desktop\taobao-sdk-java-1455552377940-2016060 ...

  8. watch 监控的新旧值一致问题处理

    watch 监控的新旧值一致问题处理 http://www.imooc.com/article/details/id/286654

  9. CodeForces 840A - Leha and Function | Codeforces Round #429 (Div. 1)

    /* CodeForces 840A - Leha and Function [ 贪心 ] | Codeforces Round #429 (Div. 1) A越大,B越小,越好 */ #includ ...

  10. 关于npm audit fix

    https://blog.csdn.net/weixin_40817115/article/details/81007774 npm audit : npm@5.10.0 & npm@6,允许 ...