好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

一个数据库操作类,适用于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

// 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的详细内容...

  阅读:33次