一个数据库操作类,适用于Oracle,ACCESS,SQLSERVER
最近做了一个数据诊断的项目,里面自己写了一个数据库的操作类,包含:连接数据库、读数据表、执行SQL操作,释放数据库等组成,希望对大家有用,由于水平有限,若有错误或者代码不足地方欢迎指正,谢谢。
ADOOperate.H
- //////////////////////////////////////////////////////////////////////
- // 类功能:用于数据库的操作 主要实现 连接数据库 读数据表 检查数据表 执行SQL语句
- //
- // 孙高朝 2010.03.25
- //////////////////////////////////////////////////////////////////////
- #if !defined(AFX_ADOOPERATE_H__EB4AC016_15D4_46E9_A754_E1C1A036DAAE__INCLUDED_)
- #define AFX_ADOOPERATE_H__EB4AC016_15D4_46E9_A754_E1C1A036DAAE__INCLUDED_
- #if _MSC_VER > 1000
- #pragma once
- #endif // _MSC_VER > 1000
- #include "stdafx.h"
- class CADOOperate
- {
- public:
- CString m_DataSource; // 数据源
- CString m_PassWord; // 密码
- CString m_UserName; // 数据库名
- _ConnectionPtr m_pConn; // ADO连接
- CString strTableName; // 表名 外边传入
- _RecordsetPtr m_pRst; // 记录集
- public:
- BOOL funCheckTable(CString strName,CString strDBType);
- BOOL ExecuteSQL(CString strSQL,LPCSTR strDBType = ORACLE);
- _RecordsetPtr& ReadTable(LPCSTR strSQL1 = NULL,LPCSTR strDBType = ORACLE); // 读表 返回记录集
- BOOL OpenDataBase(CString lpDBType); // 连接数据库
- void ExitADO();
- CADOOperate();
- virtual ~CADOOperate();
- };
- #endif // !defined(AFX_ADOOPERATE_H__EB4AC016_15D4_46E9_A754_E1C1A036DAAE__INCLUDED_)
ADOOperate.C
- // ADOOperate.cpp: implementation of the CADOOperate class.
- //
- //////////////////////////////////////////////////////////////////////
- #include "stdafx.h"
- #include "ADOOperate.h"
- #include "h_Const.h"
- #include "ShareFun.h"
- #include "FileLog.h"
- //////////////////////////////////////////////////////////////////////
- // Construction/Destruction
- //////////////////////////////////////////////////////////////////////
- CADOOperate::CADOOperate()
- {
- strTableName = " "; // 初始化表名
- m_DataSource = " "; // 数据源
- m_PassWord = " "; // 密码
- m_UserName = " "; // 数据库名
- }
- CADOOperate::~CADOOperate()
- {
- }
- //*********************************************
- //
- // 函数功能: 连接数据库
- // 参数: CString 字符串
- // 返回值: TRUE: 连接成功 FALSE:连接失败
- // 作者: 孙高朝 2010.03.24
- //
- //*********************************************
- BOOL CADOOperate::OpenDataBase(CString strDBType)
- {
- CString strSQL;
- CShareFun myFun;
- // 选择数据库连接语句
- if (strDBType == ACCESS) // ACCESS
- {
- CString strPath;
- strPath = myFun.funGetPath();
- strSQL = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strPath + "MobileDB.mdb;Persist Security Info=False";
- }
- else if (strDBType == SQLSERVER) // SQL SERVER
- {
- strSQL = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=BookManage" ;
- }
- else if (strDBType == ORACLE) // 默认为ORACLE
- {
- // 读取ADO.INI的文件
- m_DataSource = myFun.funReadini(DATASOURCE);
- m_UserName = myFun.funReadini(USERNAME);
- m_PassWord = myFun.funReadini(PASSWORD);
- strSQL = "Provider=MSDAORA.1;Password=" + (CString)m_PassWord + ";User ID=" + (CString)m_UserName
- + ";Data Source=" + (CString)m_DataSource + ";Persist Security Info=True"; // 数据库连接语句
- }
- CoInitialize(NULL); // 初始化COM库
- try
- {
- m_pConn.CreateInstance(__uuidof(Connection)); // 连接指针
- m_pConn->ConnectionString = (_bstr_t)strSQL;
- m_pConn->Open("","","",NULL);
- }
- catch (_com_error) // 连接出错处理
- {
- MessageBox(0,strDBType + "连接数据库错误","提示",MB_OK|MB_ICONINFORMATION);
- return false;
- }
- catch (...)
- {
- AfxMessageBox("SYS Error");
- return false;
- }
- return true;
- }
- //*********************************************
- //
- // 函数功能: 读取数据库表
- // 参数: CString 字符串
- // 返回值: 返回记录集数
- // 作者: 孙高朝 2010.03.24
- //
- //*********************************************
- _RecordsetPtr& CADOOperate::ReadTable(LPCSTR strSQL1,LPCSTR strDBType)
- {
- CString strSQL;
- CString strSQL2;
- CFileLog myFile;
- strSQL2 = strSQL1;
- strSQL = "SELECT * FROM " + strTableName ;
- if(strSQL2.GetLength() > 0)
- {
- strSQL = "SELECT * FROM " + strTableName + " WHERE " + strSQL1;
- }
- try
- {
- if(m_pConn==NULL) // 判断连接是否断开
- OpenDataBase(strDBType); // 重新连接
- m_pRst.CreateInstance(__uuidof(Recordset)); // 数据集指针
- m_pRst->raw_Close(); // 关闭记录集
- m_pRst->Open((_bstr_t)strSQL,m_pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
- }
- catch(_com_error e)
- {
- myFile.WriteToLog(ErrorFileName,"CADOOperate ReadTable()",(LPCSTR)e.Description());
- }
- return m_pRst; // 返回记录集
- }
- //*********************************************
- //
- // 函数功能: ADO释放函数
- // 参数:
- // 返回值:
- // 作者: 孙高朝 2010.03.29
- //
- //*********************************************
- void CADOOperate::ExitADO()
- {
- if(m_pRst->State)
- {
- m_pRst->Close();
- }
- m_pRst = NULL;
- if (m_pConn->State)
- {
- m_pConn->Close();
- }
- m_pConn = NULL;
- // 错误说明:智能指针_RecordsetPtr和_ConnectionPtr在超出作用域是会自动释放的,
- // 也就是说指针在CreateInstance()的时候分配内存,在作用域外释放,
- // 所以自己调用Release()并不是必需的,不过调用有可能出错,而设为NULL是完全可以不用的。
- // m_pConn->Release();
- CoUninitialize(); // 卸载COM库
- }
- //*********************************************
- //
- // 函数功能: 执行数据库操作
- // 参数: LPCSTR 字符串指针
- // 返回值: 返回记录集数
- // 作者: 孙高朝 2010.03.29
- //
- //*********************************************
- BOOL CADOOperate::ExecuteSQL(CString strSQL,LPCSTR strDBType)
- {
- try
- {
- if(m_pConn==NULL) // 判断连接是否断开
- OpenDataBase(strDBType); // 重新连接
- m_pRst.CreateInstance(__uuidof(Recordset)); // 数据集指针
- m_pRst->raw_Close(); // 关闭记录集
- m_pRst->Open((_bstr_t)strSQL,m_pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
- }
- catch(_com_error e)
- {
- e.Description();
- return FALSE;
- }
- return TRUE; // 返回记录集
- }
- //*********************************************
- //
- // 函数功能: 检查数据库是否存在该表
- // 参数: LPCSTR 字符串指针
- // 返回值: 返回TRUE OR FALSE
- // 作者: 孙高朝 2010.03.29
- //
- //*********************************************
- BOOL CADOOperate::funCheckTable(CString strName,CString strDBType)
- {
- CString strSQL;
- // 选择数据库连接语句
- if (strDBType == ACCESS) // ACCESS
- {
- strSQL = "SELECT * FROM MSysObjects WHERE Name = '" + strName + "'"; // 表名强制为大写, 判断是否存在
- }
- else if (strDBType == SQLSERVER) // SQL SERVER
- {
- strSQL = " " ;
- }
- else if (strDBType == ORACLE) // ORACLE
- {
- strSQL = "SELECT Table_Name FROM Tabs WHERE Table_Name='" + strName + "'"; // 表名强制为大写, 判断是否存在
- }
- try
- {
- if(m_pConn==NULL) // 判断连接是否断开
- OpenDataBase(ORACLE); // 重新连接
- m_pRst.CreateInstance(__uuidof(Recordset)); // 数据集指针
- m_pRst->raw_Close(); // 关闭记录集
- m_pRst->Open((_bstr_t)strSQL,m_pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
- }
- catch(_com_error e)
- {
- e.Description();
- return FALSE;
- }
- // 存在表否
- if (m_pRst->adoEOF)
- {
- return FALSE;
- }
- return TRUE;
- }
一个数据库操作类,适用于Oracle,ACCESS,SQLSERVER的更多相关文章
- 51)PHP,一个数据库操作类的代码
<?php //类名,也习惯上(推荐)使用跟文件名相似的名字 //定义一个mysql连接类,该类可以连接mysql数据库 //并实现其单例模式 //该类的功能还能够完成如下基本mysql操作: ...
- Android打造属于自己的数据库操作类。
1.概述 开发Android的同学都知道sdk已经为我们提供了一个SQLiteOpenHelper类来创建和管理SQLite数据库,通过写一个子类去继承它,就可以方便的创建.管理数据库.但是当我们需要 ...
- Oracle数据库操作类及连接方法
创建DataBaseAccess引用库下面包括DBConnectionString.cs,DBType.cs ,SysName.cs 三个类 DBConnectionString: using Sys ...
- C# Oracle数据库操作类实例详解
本文所述为C#实现的Oracle数据库操作类,可执行超多常用的Oracle数据库操作,包含了基础数据库连接.关闭连接.输出记录集.执行Sql语句,返回带分页功能的dataset .取表里字段的类型和长 ...
- (转)C# Oracle数据库操作类
原文地址:http://www.cnblogs.com/haibing0107/p/6143922.html using System;using System.Data;using System.C ...
- C# Oracle数据库操作类
using System; using System.Data; using System.Collections.Generic; using System.Configuration; using ...
- 一个基于PDO的数据库操作类(新) 一个PDO事务实例
<?php /* * 作者:胡睿 * 日期:2011/03/19 * 电邮:hooray0905@foxmail.com * * 20110319 * 常用数据库操作,如:增删改查,获取单条记录 ...
- Microsoft Access数据库操作类(C#)
博文介绍的Microsoft Access数据库操作类是C#语言的,可实现对Microsoft Access数据库的增删改查询等操作.并且该操作类可实现对图片的存储,博文的最后附上如何将Image图片 ...
- 【知识必备】ezSQL,最好用的数据库操作类,让php操作sql更简单~
最近用php做了点小东东,用上了ezSQL,感觉真的很ez,所以拿来跟大家分享一下~ ezSQL是一个非常好用的PHP数据库操作类.著名的开源博客WordPress的数据库操作就使用了ezSQL的My ...
随机推荐
- Java 之 Map 接口
一.Map 接口概述 java.util.Map 接口专门用来存放键值对这种对象关系的对象. 下面比较一下 Collection 与 Map 的区别: Collection 中的集合,元素是孤立存在的 ...
- Java Socket编程----网络基础
详见:https://www.cnblogs.com/rocomp/p/4790340.html Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而 ...
- fastadmin 中 a标签跳转
<a class="btn-addtabs" href="/入口文件/模块/控制器"></a>
- 【转】Linux编译链接问题----静态库和动态库
Linux静态库和动态库的命名规则 静态函数库 静态库的名字一般是libxxx.a,利用静态库编译生成的文件比较大,因为整个静态库所有的数据都会被整合进目标代码中. a) 优点: 编译后,可执行文件不 ...
- COM_STMT_PREPARE 1
mysqld_stmt_prepare void mysqld_stmt_prepare(THD* thd, const char * query, uint length, Prepared_sta ...
- jajx 传参 需要 判断的 条件
1.有没有权限. 2.数据类型 对不对 例如 id ,page 传过来时是str 类型, view中处理时需要转换成 int类型. 如果 不能转 就会报错.. 3.查询数据.数据不存在也要报错... ...
- 本地开发的jar包放到本地maven仓库
mvn install:install-file -Dfile=C:\Users\Administrator\Desktop\taobao-sdk-java-1455552377940-2016060 ...
- watch 监控的新旧值一致问题处理
watch 监控的新旧值一致问题处理 http://www.imooc.com/article/details/id/286654
- CodeForces 840A - Leha and Function | Codeforces Round #429 (Div. 1)
/* CodeForces 840A - Leha and Function [ 贪心 ] | Codeforces Round #429 (Div. 1) A越大,B越小,越好 */ #includ ...
- 关于npm audit fix
https://blog.csdn.net/weixin_40817115/article/details/81007774 npm audit : npm@5.10.0 & npm@6,允许 ...