IT-lover

导航

ADO方法访问数据库的封装接口

ADO方法访问数据库的封装接口(03)

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;
}

posted on 2005-11-28 00:11  IT界的混混  阅读(442)  评论(0)    收藏  举报