苏州粤珍轩电话:Visual C++中使用ADO访问数据库

来源:百度文库 编辑:中财网 时间:2024/05/01 02:06:30

为方便在Visual C++中使用ADO访问数据库,可以对其进行适当的封装。

例如在MFC编程中,创建了一个基于对话框的应用程序。在菜单中选择Insert(插入)/New Class(),在Class type组合框中选择Generic Class,类名为ADOConn(类名随便),默认的类名为ADOConn.cpp。

在ADOConn.h文件中添加#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("BOF","adoBOF") rename("EOF","adoEOF")

ADOConn.h为

// ADOConn.h: interface for the ADOConn class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_ADOCONN_H__34CAEA73_3114_4B9A_A736_12F4093A4725__INCLUDED_)
#define AFX_ADOCONN_H__34CAEA73_3114_4B9A_A736_12F4093A4725__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("BOF","adoBOF") rename("EOF","adoEOF")
class ADOConn 
{
    //定义方法
public:
    ADOConn();
    virtual ~ADOConn();
    void OnInitDBConn();//初始化-连接数据库
    _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);//执行查询,返回结果集,bstrSQL只要执行的语句
    BOOL ExecuteSQL(_bstr_t bstrSQL);//执行查询不返回结果集
    void ExitConnect();//断开数据库连接
    //定义变量
public:
    _ConnectionPtr m_PConnection;//指向Connection对象的指针
    _RecordsetPtr  m_pRecordset;//指向Recordset对象的指针

};

#endif // !defined(AFX_ADOCONN_H__34CAEA73_3114_4B9A_A736_12F4093A4725__INCLUDED_)

ADOConn.cpp为

// ADOConn.cpp: implementation of the ADOConn class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ADOClass.h"
#include "ADOConn.h"

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

ADOConn::ADOConn()
{

}

ADOConn::~ADOConn()
{

}
void ADOConn::OnInitDBConn()
{
    //初始化OLE/COM库环境,为访问ADO接口做准备
    ::CoInitialize(NULL);
    try
    {
        //创建Connection对象的实例
        m_PConnection.CreateInstance("ADODB.Recordset");
        _bstr_t strConnection = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=学生表;Data Source=CURT-PC";
        m_PConnection->Open(strConnection,"","",adModeUnknown);
    }
    catch(_com_error e)
    {
        AfxMessageBox(e.Description());
    }
}
_RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL) 
{
    try
    {
        if (m_PConnection==NULL)
        {
            OnInitDBConn();
        }
        m_pRecordset.CreateInstance(_uuidof(Recordset));
        m_pRecordset->Open(bstrSQL,m_PConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
    }
    catch(_com_error e)
    {
        AfxMessageBox(e.Description());
    }
    return m_pRecordset;//返回记录集
}
BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
    _variant_t RecordsAffected;
   
    try
    {
        if (m_PConnection==NULL)
        {
            OnInitDBConn();
        }
    m_PConnection->Execute(bstrSQL,NULL,adCmdText);
    return TRUE;
    }
    catch(_com_error e)
    {
        AfxMessageBox(e.Description());
        return FALSE;
    }
}
void ADOConn::ExitConnect()
{
    //关闭记录集和连接
    if (m_pRecordset!=NULL)
    {
        m_pRecordset->Close();
    }
    m_PConnection->Close();

    ::CoUninitialize();//释放环境
}