一个数据库操作类,适用于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 ...
随机推荐
- 怎么处理Win10系统更新提示代码0x80070057的错误?
在使用好系统重装助手重装了Win10系统后,由于每个用户的电脑配置不同,有些用户会在更新时出现0x80070057的错误代码.下面就教大家Win10系统更新出现0x80070057错误该怎么解决. W ...
- Cisco建网3层模型
网络畅通条件: 沿途路由器必须知道到达目标网络下一跳给谁 沿途路由器必须知道回来的数据包下一跳给谁 Router0~2均手动添加了到192.168.1.0/24网段的路由 分析1:PC0 ping B ...
- git切换账号邮箱
git config user.name 查看当前用户名 git config user.email 查看当前邮箱 git config --global user.name "用户名&qu ...
- 2.Vue调试工具vue-devtools的安装步骤和使用
1.安装步骤: 打开谷歌浏览器设置 -->扩展程序 -->勾选开发者模式 --->加载已解压的扩展程序 --->选择“chrome扩展”文件夹即可:
- nuxt入门
之前一直都是做vue-spa单页面,不利于SEO.而便于SEO的SSR(服务器端渲染)多页应用,可以使用nuxt.js这个框架来实现 (0)nuxt安装 npx create-nuxt-app < ...
- Hadoop的简单了解与安装
hadoop 一, Hadoop 分布式 简介Hadoop 是分布式的系统架构,是 Apache 基金会顶级金牌项目 分布式是什么?学会用大数据的思想来看待和解决问题 思 想很重要 1-1 . ...
- JS 截取地址栏指定字符后的内容
一.获取地址栏路径 var url = window.location.href; 二.截取指定字符后的内容 /** * 截取指定字符后的内容 * @param url 路径 * @param par ...
- 快速排序Quick_Sort
快排——排序中的明星算法,也几乎是必须掌握的算法,这次我们来领略以下快排为何魅力如此之大. 快排主要有两种思路,分别是挖坑法和交换法,这里我们以挖坑法为例来进行介绍,交换法可以参考这篇博文.值得一提的 ...
- windows系统上 安装 Redis
下载地址:https://github.com/microsoftarchive/redis/releases 下载完成后,把这个给解压出来 然后,使用 cmd 命令 进入 解压的redis目录 输入 ...
- Warning: (1260, 'Row xxx was cut by GROUP_CONCAT()')
MySql数据库查询时,使用group_concat报错“Row XXX was cut by GROUP_CONCAT()”,查了下是因为group_concat有个最大长度的限制,超过最大长度就会 ...