一个功能强大的用ADO 访问数据库的类

类别:VC语言 点击:0 评论:0 推荐:

        ADO 访问数据库是基于COM ,访问速度快、使用方便等特点。我在实际的工作当中发现可以把一些常用的方法构造成一个类,不妨叫她为 CAdoEx 类吧。下面分别是头文件、实现文件。要是有不妥之处请给我发邮件 luoshizhen@163.net

*说明:--------------------------------------------*/
/*  注 stdafx.h 里要有下面两行          */
/*  #include <comdef.h>                 */  
/*  #import "c:\program files\common files\system\ado\msado15.dll" no_namespace  rename("EOF","adoEOF")  */
/*  AfxOleInit() ;      ADO 初始在应用的主线程初始化时调用  */
/*说明:--------------------------------------------*/


/*   以下是类的成员说明      */
#ifndef _ADOEX_H_
#define _ADOEX_H_

#include "stdafx.h"

class CAdoEx 
{
public:
 CAdoEx();
 virtual ~CAdoEx();

 /*打开 Ado 数据库*/
 BOOL OpenAdo(LPCTSTR lpDSN ,LPCTSTR lpUID ,LPCTSTR lpPWD); 
   

 file://--------------------------------------------//
        /*     ADO 通用查询函数                       */ 
        /*     调用参数: 正确的SQL 查询语句.           */
        /*     可以对一个表查询,也可以对多个表查询      */
        /*     返回一个纪录集                         */
        /*     如果成功返回一个非空的纪录集            */
        /*     如果失败则返回一个NULL的纪录集          */
 _RecordsetPtr Query(LPCTSTR lpQuery);
 file://--------------------------------------------//
  
 file://--------------------------------------------//
 /*连接数据库                                  */
 BOOL CloseAdo();  
 file://--------------------------------------------//
   
 file://--------------------------------------------//
        /*     ADO 通用SQL语句执行函数                 */ 
        /*     调用参数: 正确的SQL 查询语句.           */
        /*     可以对一个表插入 修改 删除 操作          */
        /*     如果成功返回真                          */
        /*     如果失败返回假                          */
        BOOL Execute(LPCTSTR lpExcute);
 file://--------------------------------------------//

protected:
  _RecordsetPtr retRecordsetPtr;
   char lpBuff[500];
  HRESULT hResult;
   BOOL m_bOpen;               
   _ConnectionPtr m_pConnection;
};

#endif

/*------------------以下为实现文件-------------------------
/*   说明:  这是一个 Ado 类,可以实现用ADO对数据库操作     */
/*   1. 连接数据库                                        */
/*   2. 查询数据库的一个或关联表                          */
/*   3. 执行SQL 语句插入 修改 删除 操作                   */
/*   4. 关闭数据库                                        */

#include "stdafx.h"
#include "AdoEx.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

CAdoEx::CAdoEx()
{
   m_bOpen = FALSE ;
  
   /*初始化连接的实例*/
   m_pConnection.CreateInstance(_uuidof(Connection)) ;
}

CAdoEx::~CAdoEx()
{

  if(retRecordsetPtr !=NULL)
   retRecordsetPtr->Close() ;
  retRecordsetPtr = NULL ;

  CloseAdo() ;

  m_bOpen = FALSE ;
}
/*打开 Ado 数据库*/
BOOL CAdoEx::OpenAdo(LPCTSTR lpDSN ,LPCTSTR lpUID ,LPCTSTR lpPWD )
{
 BOOL bRet = FALSE ;
   
 if(m_bOpen) return TRUE ;

 try
 {
       hResult = m_pConnection->Open(lpDSN,lpUID,lpPWD,0)  ;
      
       if (SUCCEEDED(hResult))
    {
             TRACE0("Open ADO Database  Succeeded !\n") ;
             m_bOpen = TRUE ;
      bRet    = TRUE ;
    }
    else
    {
      m_bOpen = FALSE ;
             bRet    = FALSE ;
    }
 } /*end of try*/
 catch(_com_error e )
 {
  memset(lpBuff,0x00,500) ;
  sprintf(lpBuff,"打开数据库时发生异常 \n:%s",e.ErrorMessage());
  AfxMessageBox(lpBuff) ;
 }

 return bRet ;
}

/*     ADO 通用查询函数                      */ 
/*     调用参数: 正确的SQL 查询语句.         */
/*     可以对一个表查询,也可以对多个表查询   */
/*     返回一个纪录集                        */
/*     如果成功返回一个非空的纪录集          */
/*     如果失败则返回一个NULL的纪录集        */
_RecordsetPtr CAdoEx::Query(LPCTSTR lpQuery)
{
  retRecordsetPtr = NULL ;
  _variant_t vRecsAffected ;

  if(!m_bOpen) return NULL ;

  try
  {
    retRecordsetPtr = m_pConnection->Execute(lpQuery,
                                     &vRecsAffected,
                              adOptionUnspecified) ;
  }
  catch(_com_error e)
  {
  memset(lpBuff,0x00,500) ;
  sprintf(lpBuff,"查询数据库表时发生异常 \n:%s",e.ErrorMessage());
  AfxMessageBox(lpBuff) ;
  }

   return retRecordsetPtr ;
}

/*     ADO 通用SQL语句执行函数               */ 
/*     调用参数: 正确的SQL 查询语句.         */
/*     可以对一个表插入 修改 删除 操作       */
/*     如果成功返回真                        */
/*     如果失败返回假                        */
BOOL CAdoEx::Execute(LPCTSTR lpExcute)
{
  BOOL  bRet  = FALSE ;
  _variant_t vRecsAffected ;

  if(!m_bOpen) return NULL ;

  try
  {
     m_pConnection->Execute(lpExcute,
                      &vRecsAffected,
                   adOptionUnspecified) ;
    bRet = TRUE ;
  }
  catch(_com_error e)
  {
     bRet = FALSE ;
  memset(lpBuff,0x00,500) ;
  sprintf(lpBuff,"更改数据库表时发生异常 \n:%s",e.ErrorMessage());
  AfxMessageBox(lpBuff) ;
  }

   return bRet  ;
}

BOOL CAdoEx::CloseAdo()
{
    if (m_bOpen)
 {
  m_pConnection->Close() ;
  TRACE0("Close ADO Connection !\n") ;
 }

 return TRUE ;
}

/*   说明:  这是一个 Ado 类,可以实现用ADO对数据库操作     */
/*   1. 连接数据库                                        */
/*   2. 查询数据库的一个或关联表                          */
/*   3. 执行SQL 语句插入 修改 删除 操作                   */
/*   4. 关闭数据库                                        */

#include "stdafx.h"
#include "AdoEx.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

CAdoEx::CAdoEx()
{
   m_bOpen = FALSE ;
  
   /*初始化连接的实例*/
   m_pConnection.CreateInstance(_uuidof(Connection)) ;
}

CAdoEx::~CAdoEx()
{

  if(retRecordsetPtr !=NULL)
   retRecordsetPtr->Close() ;
  retRecordsetPtr = NULL ;

  CloseAdo() ;

  m_bOpen = FALSE ;
}
/*打开 Ado 数据库*/
BOOL CAdoEx::OpenAdo(LPCTSTR lpDSN ,LPCTSTR lpUID ,LPCTSTR lpPWD )
{
 BOOL bRet = FALSE ;
   
 if(m_bOpen) return TRUE ;

 try
 {
       hResult = m_pConnection->Open(lpDSN,lpUID,lpPWD,0)  ;
      
       if (SUCCEEDED(hResult))
    {
         TRACE0("Open ADO Database  Succeeded !\n") ;
         m_bOpen = TRUE ;
      bRet    = TRUE ;
    }
    else
    {
      m_bOpen = FALSE ;
         bRet    = FALSE ;
    }
 } /*end of try*/
 catch(_com_error e )
 {
  memset(lpBuff,0x00,500) ;
  sprintf(lpBuff,"打开数据库时发生异常 \n:%s",e.ErrorMessage());
  AfxMessageBox(lpBuff) ;
 }

 return bRet ;
}

/*     ADO 通用查询函数                      */ 
/*     调用参数: 正确的SQL 查询语句.         */
/*     可以对一个表查询,也可以对多个表查询   */
/*     返回一个纪录集                        */
/*     如果成功返回一个非空的纪录集          */
/*     如果失败则返回一个NULL的纪录集        */
_RecordsetPtr CAdoEx::Query(LPCTSTR lpQuery)
{
  retRecordsetPtr = NULL ;
  _variant_t vRecsAffected ;

  if(!m_bOpen) return NULL ;

  try
  {
    retRecordsetPtr = m_pConnection->Execute(lpQuery,
                                     &vRecsAffected,
                              adOptionUnspecified) ;
  }
  catch(_com_error e)
  {
  memset(lpBuff,0x00,500) ;
  sprintf(lpBuff,"查询数据库表时发生异常 \n:%s",e.ErrorMessage());
  AfxMessageBox(lpBuff) ;
  }

   return retRecordsetPtr ;
}

/*     ADO 通用SQL语句执行函数               */ 
/*     调用参数: 正确的SQL 查询语句.         */
/*     可以对一个表插入 修改 删除 操作       */
/*     如果成功返回真                        */
/*     如果失败返回假                        */
BOOL CAdoEx::Execute(LPCTSTR lpExcute)
{
  BOOL  bRet  = FALSE ;
  _variant_t vRecsAffected ;

  if(!m_bOpen) return NULL ;

  try
  {
     m_pConnection->Execute(lpExcute,
                      &vRecsAffected,
                   adOptionUnspecified) ;
    bRet = TRUE ;
  }
  catch(_com_error e)
  {
     bRet = FALSE ;
  memset(lpBuff,0x00,500) ;
  sprintf(lpBuff,"更改数据库表时发生异常 \n:%s",e.ErrorMessage());
  AfxMessageBox(lpBuff) ;
  }

   return bRet  ;
}

BOOL CAdoEx::CloseAdo()
{
    if (m_bOpen)
 {
  m_pConnection->Close() ;
  TRACE0("Close ADO Connection !\n") ;
 }

 return TRUE ;
}

 

 

 

本文地址:http://com.8s8s.com/it/it3099.htm