天天看點

最新的ADO類

// -- CAdoDB.h

// -- 導入ADO接口

#import "C:/Program Files/Common Files/System/ado/msado15.dll" no_namespace rename( "BOF", "adoBOF" ) rename( "EOF", "adoEOF" ) rename( "LockTypeEnum", "NewLockTypeEnum" ) rename( "DataTypeEnum", "NewDataTypeEnum" ) rename( "FieldAttributeEnum", "NewFieldAttributeEnum" ) rename( "EditModeEnum", "NewEditModeEnum" ) rename( "RecordStatusEnum", "NewRecordStatusEnum" ) rename( "ParameterDirectionEnum", "NewParameterDirectionEnum" )

class CAdoDB

{

public:

 _ConnectionPtr m_pConnection ; // 資料庫連接配接對象的指針

 _RecordsetPtr m_pRecordset ; // 資料庫記錄集對象的指針

    CString m_DBName ; // 記錄資料庫名

 CString m_strUserID ; // 記錄連接配接SQL Server時所使用的使用者名

 CString m_strUserPassword ; // 記錄連接配接SQL Server時所使用的密碼

 CString m_strDataSource ; // 記錄資料源位址

public:

 CAdoDB( CString DBName,

   CString strUserID = _T( "" ),

   CString strPassword = _T( "" ),

   CString strDataSource = _T( "" ) ) ; // AdoDB類構造函數

 virtual ~CAdoDB() ; // AdoDB類析構函數

 BOOL OnInitDBConnection() ; // 初始化資料庫連接配接

 void ExitConnect() ; // 斷開與資料庫的連接配接

 BOOL IsConnected() ; // 資料庫連接配接是否有效

 _RecordsetPtr& GetRecordSet( _bstr_t vSQL ) ; // 執行SELECT傳回記錄集

 BOOL ExecuteSQL( _bstr_t vSQL ) ; // 執行SQL語句 INSERT UPDATE DELETE 等

};

//  -- CAdoDB.cpp

#include "stdafx.h"

#include "CAdoDB.h"

CAdoDB::CAdoDB( CString DBName, CString strUserID, CString strUserPassword, CString strDataSource )

{

 // -- CAdoDB類構造函數

 TRACE( "Construction Of Class CAdoDB/n" ) ;

 // 成員變量初始化

 m_pConnection = NULL ;

 m_pRecordset = NULL ;

 m_DBName = DBName ;

 m_strUserID = strUserID ;

 m_strUserPassword = strUserPassword ;

 m_strDataSource = strDataSource ;

 // 連接配接資料庫

 OnInitDBConnection() ;

}

CAdoDB::~CAdoDB()

{

 // -- CAdoDB類析構函數

 TRACE( "Destruction Of Class CAdoDB/n" ) ;

 // CAdoDB對象無效時斷開與資料庫的連結

 ExitConnect() ;

}

BOOL CAdoDB::OnInitDBConnection()

{

 // -- 初始化資料庫連接配接

 TRACE( "OnInitDBConnection Of Class CAdoDB/n" ) ;

 try

 {

     // 初始化OLE/COM庫環境

     ::CoInitialize( NULL ) ;

  // 建立資料庫連接配接對象

  m_pConnection.CreateInstance( _T( "AdoDB.Connection") ) ;

  // 建立連接配接字元串

  _bstr_t strConnection =  _T( "Provider = SQLOLEDB.1 ; Persist Security Info = True ; Data Source =" ) ;

  if ( m_strDataSource.IsEmpty() )

  {

   strConnection += _T( "(local)" ) ;

  }

  else

  {

   strConnection += _bstr_t( m_strDataSource ) ;

  }

  strConnection += _T( "; Initial Catalog =" ) ;

  strConnection += _bstr_t( m_DBName ) ;

  strConnection += _T( "; User ID =" ) ;

  strConnection += _bstr_t( m_strUserID ) ;

  strConnection += _T( "; Password =" ) ;

  strConnection += _bstr_t( m_strUserPassword ) ;

  strConnection += _T( ";" ) ;

  // 如果不使用使用者名和密碼連接配接則進行Windows驗證連接配接

  if ( m_strUserID.IsEmpty() )

  {

   strConnection += _T( " Integrated Security = SSPI ;" ) ;

  }

  TRACE( "/n%s/n", (LPCTSTR)strConnection ) ;

  // 設定逾時為5秒

  m_pConnection->CommandTimeout = 5 ;

  // 建立連接配接

  m_pConnection->Open( strConnection, _T( "" ), _T( "" ), adModeUnknown ) ;

  // 初始化成功

  TRACE( "初始化資料庫連接配接成功/n" ) ;

  return TRUE ;

 }

 catch ( _com_error e )

 {

  TRACE( "Exceptions In OnInitDBConnection Of Class CAdoDB/n" ) ;

  TRACE( "%s/n", (LPCTSTR)e.Description() ) ;

  m_pConnection = NULL ;

  TRACE( "初始化資料庫連接配接失敗/n" ) ;

  return FALSE ;

 }

 catch ( ... )

 {

  TRACE( "未知的異常出現在類 CAdoDB 成員函數 OnInitDBConnection 中/n" ) ;

  m_pConnection = NULL ;

  TRACE( "初始化資料庫連接配接失敗/n" ) ;

  return FALSE ;

 }

}

void CAdoDB::ExitConnect()

{

 // -- 斷開與資料庫的連接配接

 TRACE( "ExitConnect Of Class CAdoDB/n" ) ;

 // 斷開記錄集連接配接

 if ( m_pRecordset != NULL )

 {

  m_pRecordset->Close() ;

 }

 // 斷開資料庫連接配接

 if ( m_pConnection != NULL )

 {

  m_pConnection->Close() ;

 }

 // 釋放環境資源

    ::CoUninitialize() ;

}

BOOL CAdoDB::IsConnected()

{

 // -- 資料庫連接配接是否有效

 if ( m_pConnection != NULL )

 {

  return TRUE ;

 }

 return FALSE ;

}

_RecordsetPtr& CAdoDB::GetRecordSet( _bstr_t vSQL )

{

 // -- 執行SELECT傳回記錄集

 TRACE( "GetRecordSet Of Class CAdoDB/n" ) ;

 try

 {

  // 斷開先前的記錄集連接配接

  if ( m_pRecordset != NULL )

  {

   m_pRecordset->Close() ;

  }

  // 如果還未連接配接資料庫則先連接配接資料庫

  if ( m_pConnection == NULL )

  {

   if ( !OnInitDBConnection() )

   {

    TRACE( "目前與SQL Server的連接配接無效無法執行SQL語句/n" ) ;

    m_pRecordset = NULL ;

    return m_pRecordset ;

   }

  }

  TRACE( "/nSQL 語句 : %s/n/n", (LPCTSTR)vSQL ) ;

  // 建立記錄集

        m_pRecordset.CreateInstance( __uuidof( Recordset ) ) ;

  // 取得表中的記錄集

  m_pRecordset->Open( vSQL,

                   m_pConnection.GetInterfacePtr(),

       adOpenDynamic,

       adLockOptimistic,

       adCmdText ) ;

 }

    catch ( _com_error e )

 {

  TRACE( "Exceptions In GetRecordSet Of Class CAdoDB/n" ) ;

  TRACE( "%s/n", (LPCTSTR)e.Description() ) ;

  m_pRecordset = NULL ;

  return m_pRecordset ;

 }

 catch ( ... )

 {

  TRACE( "未知的異常出現在類 CAdoDB 成員函數 GetRecordSet 中/n" ) ;

  m_pRecordset = NULL ;

  return m_pRecordset ;

 }

 return m_pRecordset ;

}

BOOL CAdoDB::ExecuteSQL( _bstr_t vSQL )

{

 // -- 執行SQL語句 INSERT UPDATE DELETE 等

 TRACE( "ExecuteSQL Of Class CAdoDB/n" ) ;

 try

 {

    // 如果還未連接配接資料庫則先連接配接資料庫

    if( m_pConnection == NULL )

    {

     if ( !OnInitDBConnection() )

     {

      TRACE( "目前與SQL Server的連接配接無效無法執行SQL語句/n" ) ;

      return FALSE ;

     }

    }

    TRACE( "/nSQL 語句 : %s/n/n", (LPCTSTR)vSQL ) ;

    // 執行SQL語句

    m_pConnection->Execute( vSQL, NULL, adCmdText ) ;

    // 執行成功

       return TRUE ;

 }

    catch ( _com_error e )

 {

  TRACE( "Exceptions In ExecuteSQL Of Class CAdoDB/n" ) ;

  TRACE( "%s/n", (LPCTSTR)e.Description() ) ;

  // 執行失敗

     return FALSE ;

 }

 catch ( ... )

 {

  TRACE( "未知的異常出現在類 CAdoDB 成員函數 ExecuteSQL 中/n" ) ;

  return FALSE ;

 }

}