跳转到主内容
极星编程网:以代码为星,赴技术山海!

一个数据库操作类,适用于Oracle,ACCESS,SQLSERVER

最近做了 一个 数据诊断的项目,里面自己写了 一个 数据库 的 操作 类,包含:连接 数据库 、读数据表、执行SQL 操作 ,释放 数据库 等组成,希望对大家有用,由于水平有限,若有错误或者代码不足地方欢迎指正,谢谢。 ADOOperate.H ///////////////////////最近做了一个数据诊断的项目,里面自己写了一个数据库的操作类,包含:连接数据库、读数据表、执行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 PHP数据库链接类(PDO+Access) PHP数据库链接类(PDO+Access)下载// 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;}

相关文章