zoukankan      html  css  js  c++  java
  • 智能指针 ADO数据库连接



    ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。
    _ConnectionPtr接口返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。使用_ConnectionPtr接口返回一个记录集不是一个好的使用方法。通常同Cdatabase一样,使用它创建一个数据连接,然后使用其它对象执行数据输入输出操作。

    _CommandPtr接口返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,你可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。如果你只执行一次或几次数据访问操作,后者是比较好的选择。但如果你要频繁访问数据库,并要返回很多记录集,那么,你应该使用全局_ConnectionPtr接口创建一个数据连接,然后使用_CommandPtr接口执行存储过程和SQL语句。

    _RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。同_CommandPtr接口一样,它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给_RecordsetPtr的connection成员变量,让它自己创建数据连接。如果你要使用多个记录集,最好的方法是同Command对象一样使用已经创建了数据连接的全局_ConnectionPtr接口
    ,然后使用_RecordsetPtr执行存储过程和SQL语句。 

    stdafx.h   中加入

    #import "c:program filescommon filessystemadomsado15.dll" no_namespace rename("EOF", "adoEOF") 
    中才能引用这三个指针

    void CSjtestDlg::OninitADOConn(void)
    {
    	try{
    			//创建连接对象实例
    			m_pConnection.CreateInstance("ADODB.Connection");
    			//设置连接字符串
    			CString strConnect=_T("DRIVER={Microsoft Access Driver (*.mdb)};uid=;pwd=;DBQ=shujuku.mdb;");
    			//使用 Open 方法连接数据库
    			m_pConnection->Open((_bstr_t)strConnect,"","",adModeUnknown); 
    	}
    	catch(_com_error e)
    	{
    			AfxMessageBox(_T("连接数据失败,请检查数据库路径是否正确!"));
    	}
    }
    
    
    
    void CSjtestDlg::ExitConnect(void) { if(m_pRecordset!=NULL) m_pRecordset->Close(); m_pConnection->Close(); }

      

           m_Grid.InsertColumn(0,_T("员工编号"),LVCFMT_LEFT,80,0);
           m_Grid.InsertColumn(1,_T("员工姓名"),LVCFMT_LEFT,80,1);
           m_Grid.InsertColumn(2,_T("所属部门"),LVCFMT_LEFT,80,2);
           m_Grid.InsertColumn(3,_T("基本工资"),LVCFMT_LEFT,80,3);
           //连接数据库
    	   OninitADOConn() ;
           //设置查询字符串
           _bstr_t bstrSQL = "select * from employees order by 员工编号 desc";
           //创建记录集指针对象实例
           m_pRecordset.CreateInstance(__uuidof(Recordset));//该句也可以使用    m_pRecordset.CreateInstance(“ADODB.Recordset”);代替打开记录集
           m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,
                  adLockOptimistic,adCmdText);
           while(!m_pRecordset->adoEOF)
           {
                  m_Grid.InsertItem(0,_T(""));
                  m_Grid.SetItemText(0,0,(_bstr_t)m_pRecordset->GetCollect(_T("员工编号")));
                  m_Grid.SetItemText(0,1,(_bstr_t)m_pRecordset->GetCollect(_T("员工姓名")));
                  m_Grid.SetItemText(0,2,(_bstr_t)m_pRecordset->GetCollect(_T("所属部门")));
                  m_Grid.SetItemText(0,3,(_bstr_t)m_pRecordset->GetCollect(_T("基本工资")));
                  //将记录集指针移动到下一条记录
                  m_pRecordset->MoveNext();
           }
      
           //断开数据库连接
           ExitConnect();
    

      

    ADOConn.h

    #import "c:program filescommon filessystemadomsado15.dll" no_namespace rename("EOF", "adoEOF") 
    
    #pragma once
    class ADOConn
    {
    public:
    	_ConnectionPtr m_pConnection;   //连接对象指针
           _RecordsetPtr m_pRecordset;   //记录集对象指针
    public :
    	ADOConn(void);
    	~ADOConn(void);
    	void OnInitADOConn() ; //连接数据库
    	BOOL ExecuteSQL(_bstr_t bstrSQL) ; //执行SQL语句
    	_RecordsetPtr & GetRecordSet(_bstr_t bstrSQL) ; //执行SQL查询并返回记录集指针
    	void ExitConnect() ;  //关闭记录集便断开数据连接
    };

    ADOConn.cpp

    #include "StdAfx.h"
    #include "ADOConn.h"
    
    
    ADOConn::ADOConn(void)
    {
    }
    
    
    ADOConn::~ADOConn(void)
    {
    }
    
    void ADOConn::OnInitADOConn(){
         try{
    			//创建连接对象实例
    			m_pConnection.CreateInstance("ADODB.Connection");
    			//设置连接字符串
    			CString strConnect=_T("DRIVER={Microsoft Access Driver (*.mdb)};uid=;pwd=;DBQ=shujuku.mdb;");
    			//使用 Open 方法连接数据库
    			m_pConnection->Open((_bstr_t)strConnect,"","",adModeUnknown); 
    		}
    	catch(_com_error e)
    	{
    		AfxMessageBox(e.Description());
    	} 
    }
    
    
    BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL){
    	try{
    		if(m_pConnection == NULL)
    			OnInitADOConn() ;
    		m_pConnection->Execute(bstrSQL , NULL , adCmdText) ;
    		return true ;
    	}
    	catch(_com_error e){
    		e.Description() ;
    	    return false ;
    	} 
    }
    
    _RecordsetPtr &   ADOConn::GetRecordSet(_bstr_t bstrSQL){
    	try{
    		if(m_pConnection == NULL)
    			OnInitADOConn() ;
    	        m_pRecordset.CreateInstance(__uuidof(Recordset));
             //打开记录集
                    m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,
                    adLockOptimistic,adCmdText);
    	}
    	catch(_com_error e){
    		e.Description() ;
        }
    	return  m_pRecordset ; 
    }
    
    void ADOConn::ExitConnect()
    {
    	 if(m_pRecordset != NULL)
             m_pRecordset->Close();
    	 m_pConnection->Close();
    }
    

      

  • 相关阅读:
    SpringMVC Hello World
    SQL Server存储过程同时返回分页结果集和总数
    C#微信公众号开发--网页授权(oauth2.0)获取用户基本信息二
    C#微信公众号开发--网页授权(oauth2.0)获取用户基本信息一
    C#微信公众号开发--微信事件交互
    C# 微信公众号开发--准备工作
    windows环境redis主从安装部署
    javascript设计模式:策略模式
    Unity3d 屏幕截图。并保存。iOS
    注册消息来判断屏幕是否旋转
  • 原文地址:https://www.cnblogs.com/liyangtianmen/p/3558545.html
Copyright © 2011-2022 走看看