最近做了一个数据诊断的项目,里面自己写了一个数据库的操作类,包含:连接数据库、读数据表、执行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. 什么是N+1查询?

    在Session的缓存中存放的是相互关联的对象图.默认情况下,当Hibernate从数据库中加载Customer对象时,会同时加载所有关联的Order对象.以Customer和Order类为例,假定O ...

  2. 作为一个java高级工程师的进阶之路

    本文可能可能更偏向于是内心的独白篇和面试技巧总结 一.独白 之前也面试别人,现在轮到自己找工作,怎么说呢,每个面试官的看法不一样,面试的方式就不一样,比如我面试别人我喜欢问项目中他用到了那些,然后针对 ...

  3. Pose Estimation

    Human Pose Estimation for Real-World Crowded Scenarios https://arxiv.org/pdf/1907.06922.pdf CrowdPos ...

  4. 详解分布式系统里session同步

    1.什么是session?什么又是cookie?他俩有啥联系和区别? 2.为什么要在多台服务器间进行session的共享同步? 3.以及有哪些方法来实现这个同步? 大家快搬板凳,老王开始扯淡咯~ 1. ...

  5. 2.webpack最基本的使用方式

    什么是webpack? webpack是前端的一个项目构建工具,它是基于Node.js开发出来的一个前端工具: webpack安装的两种方式 1.运行 'npm i webpack -g' 全局安装w ...

  6. pip报错:解决pkg_resources.DistributionNotFound: The 'pip==7.1.0' distribution was not found and is required by the application

    如果pip安装后提示依然没有pip命令,需在在添加环境变量 # vim /etc/profile 在文档最后,添加: export PATH="/usr/local/python2.7/bi ...

  7. vue1 自定义过滤器

  8. 第92题:反转链表II

    一. 问题描述 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明: 1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4->5->NUL ...

  9. java后台表单字符串长度验证

    1.方法封装前提实体类属性去除首尾空白并进行反转义 //实体类属性的get方法 public String getContent() { if(!"".equals(字符串属性名) ...

  10. 最后执行finally

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...