最近做了一个数据诊断的项目,里面自己写了一个数据库的操作类,包含:连接数据库、读数据表、执行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. SublimeText 3 常见快捷键

      ·F12 跳转至预定义 ·F11 全屏模式 ·Ctrl+A 本文全选 ·Ctrl+F 打开底部搜索框,查找关键字. ·Ctrl+D 本文件选中光标选中的单词 ·Ctrl+L 选中光标所在一行 ·C ...

  2. git的使用(win7 64位)

    下载安装 1.官方下载网址:https://git-scm.com/downloads: 2.安装十分简单,按照默认配置,一直点击next,最后点击install,即安装成功: 3.安装成功之后,则自 ...

  3. 【Day4】4.Request对象之Get请求与URL编码

    import urllib.parse as up import urllib.request as ur kw = '动漫' data ={ 'kw':kw, 'ie':'utf-8', 'pn': ...

  4. wakelock查看

    Android的wakelock分为两层 待机异常https://wenku.baidu.com/view/6b765c8802020740be1e9bd8.html Linux层和应用层 查看Lin ...

  5. python自动生成Docx(docxtpl库)

    python这个库很有用,可以格式化生成报告等. 其他内容请点此处,下面只写docxtpl的功能代码. # coding: utf-8 import web # 我们用的webpy框架 import ...

  6. Flyme密码验证策略升级,忘记锁屏密码及「关机密码」功能

      手机里有很多需要用到密码的地方,比如「手机密码」.「文档锁定区」.「应用加密」.「隐私模式」.忘记密码可是一件麻烦事,以前只能通过清除数据或格式化存储盘来解决.现在有了「关联魅族账号」功能,这些功 ...

  7. element 中表单验证的解析。

    https://blog.csdn.net/qq_24504591/article/details/88048894 https://segmentfault.com/a/11900000125513 ...

  8. linux实操_shell预定义变量

    当前进程号: 运行后 后台最后一个进程号: 运行后

  9. P4118 [Ynoi2016]炸脖龙I

    思路:扩展欧拉定理 提交:\(\geq5\)次 错因:快速幂时刚开始没有判断\(a\)是否大于\(p\) 题解: 用树状数组维护差分,查询时暴力从左端点的第一个数向右端点递归,若递归时发现指数变为\( ...

  10. P2680 运输计划 二分+树上差分

    又咕咕了几天\(QwQ\) 思路:二分+树上差分 提交:\(\geq5\)次 错因:\(lca\)写错+卡了很久常数(哪位大佬帮我康康,有更好的写法请指出\(QwQ\)) 题解: 我们先将原问题转化为 ...