MFC连接ACCESS数据库

这里介绍一下简单的数据库编程,C++利用ADO连接ACCESS数据库,进行简单的插入、删除、读取、修改操作。利用ADO连接ACEESS和连接MS—SQL大同小异,只是连接驱动等细节不同而已。

下面就介绍数据库编程的基本步骤

第一步:加载ADO类

第二步:初始化ole库

第三步:连接打开数据库

第四步:组装sql语句,并利用智能指针执行SQL语句

下面详细介绍所需代码~~~

1、在stdafx.h中添加

#import "c:\program files\common files\system\ado\msado15.dll"  no_namespace  rename ("EOF", "adoEOF")

如果加载失败的话,去c:\program files\common files\system\ado查看是否有msado15.dll,对于xp以上系统该文件都是存在的,如果做产品时害怕用户电脑可能没有这个文件,可以将msado15.dll打包到程序中,这是要保证msado15.dll存在于程序当前目录,同时修改上句代码为

#import "msado15.dll"  no_namespace  rename ("EOF", "adoEOF")

2、初始化ole库,在InitInstance()函数中增加ole初始化函数,

    if(!AfxOleInit())//这就是初始化COM库
    {
          AfxMessageBox("OLE初始化出错!");
          return FALSE;
    } 

3、在引入ado并初始化成功com库后,就可以使用智能指针了。

    _ConnectionPtr m_pConnection; //连接,可以调用execute函数执行sql语句
    _RecordsetPtr m_pRecordset;//结果集,可以掉用open函数执行sql语句

    _CommandPtr m_pCommand; //命令对象,可以调用execute执行sql语句

//连接数据库

    HRESULT hr;
    try
    {
        hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
        if(SUCCEEDED(hr))
        {

             //连接数据库,其中set.mdb为数据库的名称,这里省略路径,表示在当前目录,可以写绝对路径或相对路径
            hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=set.mdb","","",adModeUnknown);
        }
    }
    catch(_com_error e)///捕捉异常
    {
        CString errormessage;
        errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
        AfxMessageBox(errormessage);///显示错误信息
    }

4进行数据库操作,数据库操作通过ConnectionPtr,RecordsetPtr、CommandPtr都可以实现。

通过ConnectionPtr:

    _variant_t RecordsAffected;
    CString sSql = _T("insert into stu values (20,20)");
    m_pConnection->Execute((_bstr_t)sSql,&RecordsAffected,adCmdText);

通过commandPtr:

    _CommandPtr pCommand;
    _RecordsetPtr pRs;
    pCommand.CreateInstance(__uuidof(Command));
    pCommand->ActiveConnection=m_pConnection;
    pCommand->CommandText="select * from stu";
    pCommand->CommandType=adCmdText;
    pCommand->Parameters->Refresh();
    pRs=pCommand->Execute(NULL,NULL,adCmdUnknown);
    while(!pRs->adoEOF)
    {
        _variant_t varValue = pRs->GetCollect("0");//获取第0列的数据
        CString strValue=(char*)_bstr_t(varValue);
        pRs->MoveNext();
    }

通过RecordsetPtr:

m_pRecordset.CreateInstance(__uuidof(Recordset));

CString strSql="select * from middle";
m_pRecordset->Open((_bstr_t)strSql,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);
while(!m_pRecordset->adoEOF)//遍历所有记录
{
        _variant_t TheValue; //VARIANT数据类型
        TheValue = m_pRecordset->GetCollect("BIG_NAME");//得到字段BIG_NAME的值
         m_pRecordset->MoveNext();//转到下一条纪录
}
m_pRecordset->Close();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值