ObjectARX中ADO操作数据库的一个类实例封装

来源:互联网 发布:excel怎么编程 编辑:程序博客网 时间:2024/06/11 21:08

ObjectARX中ADO操作数据库的一个类实例封装
//定义一个CAdoDb.h的C++Ado的操作的一个类实例定义#pragma once// #include "CAdoDb.h"#include "stdafx.h"#include "Convert.h"#ifndef _CAdoDb_H_#define _CAdoDb_H_enum EnumAdoDbType{   DbAccess=0,   DbSQLServer=1,   DbOracle=2,};class CAdoDb{public:CAdoDb(void);~CAdoDb(void);    void LoadCOM(void);//初始化COMvoid UnLoadCOM(void);//释放COM//Convert cvt;//获取一个连接对象_ConnectionPtr ConnPtr;_ConnectionPtr GetConnection();_CommandPtr GetCommand();//连接字符串_bstr_t ConnectionString;//设置连接信息EnumAdoDbType enumDbType;void SetConnStr_mdb(_bstr_t mdbpath,_bstr_t userid,_bstr_t password);void SetConnStr_sql(_bstr_t Data_Source,_bstr_t Initial_Catalog,_bstr_t userid,_bstr_t password);   _bstr_t ErrorMessage;//打开连接bool Open();//获取表数据_RecordsetPtr Execute(_bstr_t sql);//执行一个数据库操作select,update,insert,delete,//...BOOL ExecuteNonQuery(_bstr_t sql);BOOL ExecuteNonQuery(_bstr_t sql,_ConnectionPtr conptr);//获取当前行中字段内容char* GetFieldValue(_RecordsetPtr rs,char* fieldName);    wchar_t* GetFieldValueW(_RecordsetPtr rs,char* fieldName);//关闭Ado连接void Dispose(void);};#endif

//CAdoDb.cpp是对CAdoDb.h头文件类成员的实现#pragma once#include "stdafx.h"//#include "Convert.h"#include "CAdoDb.h"using namespace std;CAdoDb::CAdoDb(void){}CAdoDb::~CAdoDb(void){}void CAdoDb::LoadCOM(void){CoInitialize(NULL); //初始化COM,必须的}void CAdoDb::UnLoadCOM(void){CoUninitialize(); //释放COM}//获取一个连接对象_ConnectionPtr CAdoDb::GetConnection(){    _ConnectionPtr m_pConnection; //创建智能指针,必须的    //m_pConnection.CreateInstance(__uuidof(Connection));  //或 m_pConnection.CreateInstance("ADODB.Connection"); return m_pConnection;}_CommandPtr CAdoDb::GetCommand(){ _CommandPtr m_pCommand;     m_pCommand.CreateInstance(_uuidof(Command)); return m_pCommand;}void CAdoDb::SetConnStr_mdb(_bstr_t mdbpath,_bstr_t userid,_bstr_t password){_bstr_t constr;//this->enumDbType=DbAccess;    //mdb数据库连接字符串//_bstr_t mdbpath="d:\\test.mdb";//char* userid="Admin";//char* password="";constr="Provider=Microsoft.Jet.OLEDB.4.0;";    constr += "Data Source=" + mdbpath + ";";    constr += "user id="+userid+";";    constr += "password="+password+";";    constr += "Persist Security Info=True;";ConnectionString=constr;}void CAdoDb::SetConnStr_sql(_bstr_t Data_Source,_bstr_t Initial_Catalog,_bstr_t userid,_bstr_t password){_bstr_t constr;//this->enumDbType=DbSQLServer;    constr="Provider=SQLOLEDB.1;Password="+password+";";constr+="Persist Security Info=True;";constr+="User ID="+userid+";";constr+="Initial Catalog="+Initial_Catalog+";";constr+="Data Source="+Data_Source+"";this->ConnectionString=constr;}//打开连接bool CAdoDb::Open(){bool rbc=false;try{_bstr_t constr=this->ConnectionString;this->ConnPtr=this->GetConnection();this->ConnPtr->ConnectionString=constr;this->ConnPtr->Open(constr,"","",adConnectUnspecified);rbc=true;}catch(_com_error &e){ rbc=false;         //cout<<"数据库初始化错误! "<<endl;  //const TCHAR *msg; //msg=e.ErrorMessage();//_T("Error Description="); //cout<<"ErrorMessage="<<msg<<endl; //_bstr_t errmsg=new _bstr_t(msg); //errmsg=L"数据库初始化错误!"+errmsg; this->ErrorMessage="数据库初始化错误!"; }return rbc;}//获取一个记录集_RecordsetPtr CAdoDb::Execute(_bstr_t sql){ _RecordsetPtr pRst(__uuidof(Recordset)); _variant_t RecordsAffected; pRst=this->ConnPtr->Execute(sql,&RecordsAffected,adCmdText);//使用Execute方法,student为表名 return pRst;}BOOL CAdoDb::ExecuteNonQuery(_bstr_t sql){    return ExecuteNonQuery(sql,this->ConnPtr);}BOOL CAdoDb::ExecuteNonQuery(_bstr_t sql,_ConnectionPtr conptr){try{_variant_t vNULL;vNULL.vt = VT_ERROR;        ///定义为无参数vNULL.scode = DISP_E_PARAMNOTFOUND;//_RecordsetPtr m_pRecordset(__uuidof(Recordset));_CommandPtr m_pCommand=this->GetCommand();m_pCommand->ActiveConnection=conptr;m_pCommand->CommandText=sql;m_pRecordset = m_pCommand->Execute(&vNULL,&vNULL,adCmdText);}    catch(_com_error &e)    {                return FALSE;    }    return TRUE;}//获取当前行中字段内容char* CAdoDb::GetFieldValue(_RecordsetPtr rs,char* fieldName){char* line;_variant_t var;string strName;//初始化//line=NULL;//var = rs->GetCollect(fieldName);    //var =rs->GetFields()->GetItem("STDName")->GetValue();    if(var.vt != VT_NULL)     {   strName = (LPCSTR)_bstr_t(var);line=(char *)strName.c_str();        }return line;}wchar_t* CAdoDb::GetFieldValueW(_RecordsetPtr rs,char* fieldName){   wchar_t* tmp;   char* tmpcharPtr=GetFieldValue(rs,fieldName);   //   _bstr_t bstrt=cvt.Get_bstr_t(tmpcharPtr);   tmp=cvt.GetWchar_t(bstrt);   return tmp;}//关闭Ado连接void CAdoDb::Dispose(void){if(this->ConnPtr){this->ConnPtr->Close();//Release//this->ConnPtr->Release();}}


原创粉丝点击