注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

樱之花

叶散的时候,你明白欢聚;花谢的时候,你明白青春.

 
 
 

日志

 
 
关于我

分类中“我的实验室”是我在日常工作中的一些知识总结,有些写的比较匆忙,可能大家在阅读时会产生困扰,后期有时间我会重新整理编辑,谢谢大家的到访,您们的支持是我前进的动力!

网易考拉推荐

C++连接ACCESS数据库  

2012-02-06 20:10:09|  分类: C++学习之路 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

这里介绍一下简单的数据库编程,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();

  评论这张
 
阅读(6440)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017