开发者社区> 范大脚脚> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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中获取对应的连接字符串。谢谢!!


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/archive/2013/01/19/2867210.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
数据库的连接方法
数据库的连接方法
9 0
连接并使用数据库
连接并使用数据库
35 0
数据库连接池
数据库连接池是一组连接集合,一般在应用启动时完成连接创建,减少查询场景发生时创建数据库连接的时间消耗。 一个连接池组件至少需要完成连接创建和收回,实现过程中往一个数组中放入创建完成的连接,用时从数组取出,数据元素减1,用完放回,数据元素加1。
1233 0
数据库连接详解
这篇文章是基于我开发读写分离中间件和数据库智能运维平台时的经验总结而成。网上对数据库连接系统分析的文章非常少,甚至几乎没有。这篇文章很多内容都参杂了我个人的见解,不一定全,但是每一个知识点都是我验证过的。
1349 0
在MFC中使用OTL库连接数据库
 http://hyhvi.iteye.com/blog/1549639 在Win32控制台程序下,要使用OTL库,只需在程序加入OTL头文件,并写上以下两句代码即可(ODBC方式):     #define OTL_ODBC      #include "otlv4.
943 0
在MFC中使用OTL库连接数据库
 http://hyhvi.iteye.com/blog/1549639 在Win32控制台程序下,要使用OTL库,只需在程序加入OTL头文件,并写上以下两句代码即可(ODBC方式):     #define OTL_ODBC      #include "otlv4.
975 0
数据库连接池
1.思想 连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用
1534 0
c++ 连接数据库
c++ 连接数据库 C++如何连数据库? c++ 通常用ADO的方式连接sql server等数据库。基本流程如下。  (1)初始化COM库,引入ADO库定义文件; (2)用Connection对象连接数据库 ; (3)利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理。  (4)使用完毕后关闭
1092 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载