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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值