一个数据库操作类,适用于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 ...
随机推荐
- SublimeText 3 常见快捷键
·F12 跳转至预定义 ·F11 全屏模式 ·Ctrl+A 本文全选 ·Ctrl+F 打开底部搜索框,查找关键字. ·Ctrl+D 本文件选中光标选中的单词 ·Ctrl+L 选中光标所在一行 ·C ...
- git的使用(win7 64位)
下载安装 1.官方下载网址:https://git-scm.com/downloads: 2.安装十分简单,按照默认配置,一直点击next,最后点击install,即安装成功: 3.安装成功之后,则自 ...
- 【Day4】4.Request对象之Get请求与URL编码
import urllib.parse as up import urllib.request as ur kw = '动漫' data ={ 'kw':kw, 'ie':'utf-8', 'pn': ...
- wakelock查看
Android的wakelock分为两层 待机异常https://wenku.baidu.com/view/6b765c8802020740be1e9bd8.html Linux层和应用层 查看Lin ...
- python自动生成Docx(docxtpl库)
python这个库很有用,可以格式化生成报告等. 其他内容请点此处,下面只写docxtpl的功能代码. # coding: utf-8 import web # 我们用的webpy框架 import ...
- Flyme密码验证策略升级,忘记锁屏密码及「关机密码」功能
手机里有很多需要用到密码的地方,比如「手机密码」.「文档锁定区」.「应用加密」.「隐私模式」.忘记密码可是一件麻烦事,以前只能通过清除数据或格式化存储盘来解决.现在有了「关联魅族账号」功能,这些功 ...
- element 中表单验证的解析。
https://blog.csdn.net/qq_24504591/article/details/88048894 https://segmentfault.com/a/11900000125513 ...
- linux实操_shell预定义变量
当前进程号: 运行后 后台最后一个进程号: 运行后
- P4118 [Ynoi2016]炸脖龙I
思路:扩展欧拉定理 提交:\(\geq5\)次 错因:快速幂时刚开始没有判断\(a\)是否大于\(p\) 题解: 用树状数组维护差分,查询时暴力从左端点的第一个数向右端点递归,若递归时发现指数变为\( ...
- P2680 运输计划 二分+树上差分
又咕咕了几天\(QwQ\) 思路:二分+树上差分 提交:\(\geq5\)次 错因:\(lca\)写错+卡了很久常数(哪位大佬帮我康康,有更好的写法请指出\(QwQ\)) 题解: 我们先将原问题转化为 ...