VC语言

本类阅读TOP10

·VC++ 学习笔记(二)
·用Visual C++打造IE浏览器(1)
·每个开发人员现在应该下载的十种必备工具
·教你用VC6做QQ对对碰外挂程序
·Netmsg 局域网聊天程序
·Windows消息大全
·VC++下使用ADO编写数据库程序
·VC++学习笔记(四)
·非法探取密码的原理及其防范
·怎样在VC++中访问、修改注册表

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
ADO 方法访问数据库的封装接口(03)

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

5. DBRecordSetImpl.h
#pragma once

typedef _RecordsetPtr CADORecordSetPtr;

class CDBRecordSetImpl
{
 //构造函数和析构函数
public:
 CDBRecordSetImpl(void);
 virtual ~CDBRecordSetImpl(void);

 //copy constructor
 CDBRecordSetImpl(const CDBRecordSetImpl& rRecordSetImpl) ;

 //operator = ,如果复制成功,则GetErrorMessage()返回空串
 CDBRecordSetImpl& operator= (const CDBRecordSetImpl& rRecordSetImpl) ; 

 //接口函数
public:
 //返回记录集
 CADORecordSetPtr& GetRecordSet(void);

 /*
 * 判断当前记录集是否已经创建对象
 */
 BOOL isValid(void) ;

 void SetErrorMessage(LPCTSTR szErrMsg,const char* szSourceFile=NULL,int nLine=0) ;

 const CString& GetErrorMessage(void) ;

protected:

 //记录集
 CADORecordSetPtr m_pRecordSetPtr;

 //error message
 CString m_strErrMsg ;
};

inline CADORecordSetPtr& CDBRecordSetImpl::GetRecordSet(void)
{
 return m_pRecordSetPtr ;
}

inline BOOL CDBRecordSetImpl::isValid(void)
{
 return (m_pRecordSetPtr != NULL) ;
};

inline const CString& CDBRecordSetImpl::GetErrorMessage(void)
{
 return m_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__) ;
 }
}

//copy constructor
CDBRecordSetImpl::CDBRecordSetImpl(const CDBRecordSetImpl& rRecordSetImpl):
 m_pRecordSetPtr(NULL)
{
 *this = rRecordSetImpl ;
}

//operator =
CDBRecordSetImpl& CDBRecordSetImpl::operator= (const CDBRecordSetImpl& rRecordSetImpl)
{
 if(this == &rRecordSetImpl)
 {
  return *this ;
 }

 //错误信息不复制,如果复制成功,则m_strErrMsg为空 
 try
 {
  m_strErrMsg = _T("");
  //clone it from destination
  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 ;
}

void CDBRecordSetImpl::SetErrorMessage(LPCTSTR szErrMsg,const char* szSourceFile,int nLine)
{
 m_strErrMsg = szErrMsg ;
}




相关文章

相关软件