zoukankan      html  css  js  c++  java
  • MFC连接数据库

    我是一个刚刚进入VC++的一个小菜鸟 ,最近由于有一个课题需要 使用VC++和数据库的连接的编程课题,所以我初次学习了这方面的内容。我折腾了2天的样子,才写出了一个很简易的Test,这里我主要想分享下我在学习的过程中遇到的问题和一点点小小的体会吧,希望有懂的人看到了这篇博客愿意帮我解答下这些问题,感之不尽。

    由于入门的书是《VC++开发入门和编程实践》,上面关于这个部分的内容有亮点,一个是ODBCADO。我就拿了ODBC做了第一次尝试,我用的是ACCESS2010VS2010,结果在建立MFC的时候选择数据源的时候出现了问题,开始的时候是说需要必须连接数据源,可是刚刚我点了很多次我需要建立的数据源啊?然后我就从MFC建立的同时新建数据源,结果悲剧又发生了,还是连接不上,于是我转战ADO

    首先我看了孙鑫的视频第二十课,讲到了ADO连接数据源的相关编程。根据我图书馆中借的书《Vistual C++ 数据库系统开发完全手册》的内容了解到了很多,所以,我在这里根据孙鑫的视频编程归纳了一下大致的编程顺序:

    我前期各种教程的一个最大的苦恼就是一些ADO函数不知道在哪里添加,在这里我就说明下把,如果是一个基于对话框模式的MFCexe文件,就直接在那个你需要进行数据库调用的那个按钮对应的函数添加。

    第一步,需要囊括ADO的文件:#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") 放在StdAfx.h中关于各种include的描述之后。这句话中#import的意思是引入,后面使用了rename为了避免类型库文件中的EOF和系统文件的EOF重名。

    第二步,各种初始化和定义:

         CoInitialize(NULL);  //初始化COM环境

    _ConnectionPtr pCon( __uuidof(Connection));

    _RecordsetPtr pRe(__uuidof(Recordset));

    Connection对象是与数据源相连接,而Recordset对象记录集。

    第三步,连接:

    pCon->ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;User ID=admin;Data Source=Agenda";

    try

    {

    pCon->Open("","","",adConnectUnspecified);

    }

    catch(_com_error *e)

    {

    ::MessageBox(NULL,_T("无法打开"),_T("提示"), MB_OK | MB_ICONWARNING);

    }     

    我就在这部卡了很久很久,因为我获取不到pCon->ConnectionString。这是一个连接字符串,我看到的大部分方法都是从一个COM控件Ado Date Control获取,可是VS2010已经不存在这个控件了,在去百度了下一些教程。结果下的OCX文件说不兼容,让我很纠结,我到现在为止都不知道如何在VS2010上面获取这个连接字符串,我希望有高手能够指导我这个问题。

    后来我实在没有办法就直接下了个VC6.0++来获取这个连接字符串,很轻松的就获取到了。但是毕竟这种方法灰常麻烦,所以我很蛋疼。

    接下来每个步骤瞬间就很简单了,至于这里为啥要用try和catch,是因为我怕连接的时候出现各种神奇的问题,于是我想捕捉下错误。

    第四歩,用SQL语句操作:

    try

    {

    pRe = pCon->Execute("SELECT * FROM Agenda",               

    NULL,

    adCmdText);

    }

    catch(_com_error *e)

    {

    AfxMessageBox(e->ErrorMessage());

    }

    Execute这个方法的意义我个人以为是将连接和使用结合的作用。第一个参数是SQL语句,第二个是个可选的参数 ,用来返回记录数目 ,第三个这是如何为其赋值。

    第五步,对数据库操作:

    while(!pRe->adoEOF)

    {

    ((CListBox*)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)pRe->GetCollect(_T("AgendaName")));

    pRe->MoveNext();

    }

    第六步,释放占有的内存:

    pRe->Close();

    pCon->Close();

    pRe.Release();

    pCon.Release();

    CoUninitialize();

    注意,最后两个Release之前必须是用.而不是->,然后VS2010中不知道为啥会将.强制改为->,这不我也是从VC6.0++上更改的。

    OK,这两天的爆头苦恼的数据库连接就搞定了,接下来课题依旧还要继续写,希望这篇文章会给有帮助的初学者些许帮助吧,还请如果的高手指导我如何在VS2010中获取对应的连接字符串。谢谢!!

  • 相关阅读:
    pyton 类(4) 静态方法
    python 类(3) property
    python 类(2)
    python 类(1)
    python 文件写入
    python 文件读取
    python 高阶函数 lamdad reduce map
    python 时间转换
    GDI+_从Bitmap里得到的Color数组值解决方案
    32位机,CPU是如何利用段寄存器寻址的
  • 原文地址:https://www.cnblogs.com/yaowen/p/2867210.html
Copyright © 2011-2022 走看看