ADO方法访问数据库的封装接口
5.DBRecordSetImpl.h
#pragmaonce
typedef_RecordsetPtrCADORecordSetPtr;
classCDBRecordSetImpl
{
//构造函数和析构函数
public:
CDBRecordSetImpl(void);
virtual~CDBRecordSetImpl(void);
//copyconstructor
CDBRecordSetImpl(constCDBRecordSetImpl&rRecordSetImpl);
//operator=,如果复制成功,则GetErrorMessage()返回空串
CDBRecordSetImpl&operator=(constCDBRecordSetImpl&rRecordSetImpl);
//接口函数
public:
//返回记录集
CADORecordSetPtr&GetRecordSet(void);
/*
* 判断当前记录集是否已经创建对象
*/
BOOLisValid(void);
voidSetErrorMessage(LPCTSTRszErrMsg,constchar*szSourceFile=NULL,intnLine=0);
constCString&GetErrorMessage(void);
protected:
//记录集
CADORecordSetPtrm_pRecordSetPtr;
//errormessage
CStringm_strErrMsg;
};
inlineCADORecordSetPtr&CDBRecordSetImpl::GetRecordSet(void)
{
returnm_pRecordSetPtr;
}
inlineBOOLCDBRecordSetImpl::isValid(void)
{
return(m_pRecordSetPtr!=NULL);
};
inlineconstCString&CDBRecordSetImpl::GetErrorMessage(void)
{
returnm_strErrMsg;
}
6.DBRecordSetImpl.cpp
#include"StdAfx.h"
#include"dbrecordsetimpl.h"
#include"DBErrorMsgDefs.h"
CDBRecordSetImpl::CDBRecordSetImpl(void)
{
try
{
m_pRecordSetPtr.CreateInstance(__uuidof(Recordset));
}
catch(_com_error&e)
{
SetErrorMessage((LPCTSTR)e.Description(),__FILE__,__LINE__);
}
catch(...)
{
SetErrorMessage(EXCEPTION_UNKNOWN,__FILE__,__LINE__);
}
}
CDBRecordSetImpl::~CDBRecordSetImpl(void)
{
try
{
//关闭连接,并释放对象
if(m_pRecordSetPtr!=NULL)
{
if(m_pRecordSetPtr->GetState()!=adStateClosed)
{
m_pRecordSetPtr->Close();
}
m_pRecordSetPtr=NULL;
}
}
catch(_com_error&e)
{
SetErrorMessage((LPCTSTR)e.Description(),__FILE__,__LINE__);
}
catch(...)
{
SetErrorMessage(EXCEPTION_UNKNOWN,__FILE__,__LINE__);
}
}
//copyconstructor
CDBRecordSetImpl::CDBRecordSetImpl(constCDBRecordSetImpl&rRecordSetImpl):
m_pRecordSetPtr(NULL)
{
*this=rRecordSetImpl;
}
//operator=
CDBRecordSetImpl&CDBRecordSetImpl::operator=(constCDBRecordSetImpl&rRecordSetImpl)
{
if(this==&rRecordSetImpl)
{
return*this;
}
//错误信息不复制,如果复制成功,则m_strErrMsg为空
try
{
m_strErrMsg=_T("");
//cloneitfromdestination
if(rRecordSetImpl.m_pRecordSetPtr!=NULL)
{
if(rRecordSetImpl.m_pRecordSetPtr->GetState()==adStateOpen)
{
//关闭连接,并释放对象
if(m_pRecordSetPtr!=NULL)
{
if(m_pRecordSetPtr->GetState()!=adStateClosed)
{
m_pRecordSetPtr->Close();
}
m_pRecordSetPtr=NULL;
}
m_pRecordSetPtr=rRecordSetImpl.m_pRecordSetPtr->Clone(adLockUnspecified);
}
}
}
catch(_com_error&e)
{
SetErrorMessage((LPCTSTR)e.Description(),__FILE__,__LINE__);
}
catch(...)
{
SetErrorMessage(EXCEPTION_UNKNOWN,__FILE__,__LINE__);
}
return*this;
}
voidCDBRecordSetImpl::SetErrorMessage(LPCTSTRszErrMsg,constchar*szSourceFile,intnLine)
{
m_strErrMsg=szErrMsg;
}
浙公网安备 33010602011771号