一个数据库操作类,适用于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 ...
随机推荐
- 使用的jQuery加载源的优势【问题】
[问题]使用的jQuery加载源的优势? [答案]许多用户在访问其他站点时,已经从谷歌或微软加载过 jQuery.所有结果是,当他们访问您的站点时,会从缓存中加载 jQuery,这样可以减少加载时间. ...
- el-select 可选择可输入
<el-select v-model="saveWardForm.wardCode" placeholder="" filterable @blur=&q ...
- Microsoft Internet Explorer v11 XML External Entity Injection 0day
[+] Credits: John Page (aka hyp3rlinx) [+] Website: hyp3rlinx.altervista.org[+] Source: http://hyp3 ...
- [LeetCode] 283. Move Zeroes ☆(移动0到最后)
描述 给定一个数组nums,写一个函数,将数组中所有的0挪到数组的末尾,维持其他所有非0元素的相对位置. 举例: nums = [0, 1, 0, 3, 12], 函数运行后结果为[1, 3, 12, ...
- vim文件时自动添加作者、时间、版权等信息
在工作中,搞运维的工程师往往会编写或完善自动化脚本时,都会手动添加表头注释,例如版权声明.作用.时间等信息提示,如果每次都手动编辑添加会大大消耗时间,所有我们可以利用快捷方法来节省时间,一种是手动在家 ...
- Sonya and Exhibition
http://codeforces.com/group/1EzrFFyOc0/contest/1004/problem/B #include<iostream> #include<c ...
- 正则表达式匹配IP地址
'''首先分析ip地址的特征:255.255.255.255,前三位的数字处理基本一致 1位: 0-9 \d2位:10-99 [1-9]\d3位:100-19 ...
- python3 pyinstaller
一.安装python.pywin32.pyinstaller库 二.官网:https://pyinstaller.readthedocs.io/en/v3.3.1/usage.html#general ...
- 模糊查询的sql语句
Java程序中使用的sql语句一直不明白是什么作用,在网上搜索了一些资料,看到一篇博客,稍微解答了具体每条代码的作用,因为作者加了详细的注解,可以作为参考 <JavaWeb dao层条件查询(模 ...
- Web缓存Cache、Application、Session与ViewState
在ASP.NET中,有很多种保存信息的对象.例如:APPlication,Session,Cookie,ViewState和Cache等,那么它们有什么区别呢?每一种对象应用的环境是什么? 方法 信息 ...