最近做了一个数据诊断的项目,里面自己写了一个数据库的操作类,包含:连接数据库、读数据表、执行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. js入门之数组

    数组是一种数据类型,数组可以存储很多项, 有序,集合 Array 定义: var names = ['zs','ls','ww','zl'] 访问: 用索引或/下标 数组可以存储多种类型的数据 但是一 ...

  2. 阿里高级架构师教你使用Spring JMS处理消息事务源码案例

    消费者在接收JMS异步消息的过程中会发生执行错误,这可能会导致信息的丢失.该源码展示如何使用本地事务解决这个问题.这种解决方案可能会导致在某些情况下消息的重复(例如,当它会将信息储存到数据库,然后监听 ...

  3. oracle 的普通语法

    select sysdate from dual -- 时间 select SYS_GUID() from dual --唯一

  4. ORACLE SQL性能优化汇总

    ORACLE SQL语句共享 Oracle SQL语句具备共享特性,为了不让ORACLE数据库重复解析相同的简单单表SQL语句,ORACLE在SGA系统共享区域内SBP共享池内存放的SQL语句将被所有 ...

  5. linux iptables理论学习

    近来回顾系统知识,想写个基于iptables安全防御的脚本,实现系统自动防护. 参考文档:http://blog.chinaunix.net/uid-26495963-id-3279216.html ...

  6. sqlserver 拼接字符串分割

    CREATE FUNCTION [dbo].[fnQuerySplit] ( @string VARCHAR(MAX) ,--待分割字符串 )--分割符 ) ) ) AS BEGIN DECLARE ...

  7. 开源框架---通过Bazel编译使用tensorflow c++ API 记录

    开源框架---通过Bazel编译使用tensorflow c++ API 记录 tensorflow python API,在python中借用pip安装tensorflow,真的很方便,几句指令就完 ...

  8. vscode远程修改文件('file': A system error occured )

    The command you want is :e (short for :edit). If you use :edit! it will discard local changes and re ...

  9. JS中constructor,prototype

    First: this this定义: this就是函数赖以执行的对象. 分析这句话: 1. this是对象. 2. this依赖函数执行的上下文环境. 3. this存在函数中. 直接看例子: al ...

  10. Object类实现的方法

    ---恢复内容开始--- 1.Clone 对象浅复制,实现Clonable接口可调用,否则CloneNotSupportedException异常 2.getClass final方法,获得方法运行的 ...