天天看点

最新的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 ;

 }

}