当前位置: 首页 > news >正文

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,如需转载请自行联系原作者

相关文章:

  • mina 和 xsocket
  • RHCE 学习笔记(7) 进程管理
  • vSphere基本功能介绍
  • AI 新技术革命将如何重塑就业和全球化格局?深度解读 UN 报告(中篇)
  • 【java实现邮件的发送分享】
  • 基于CENTOS搭建Docker环境[QCLOU实验记载]
  • web开发资料
  • 验证码广告:站长增加收入新渠道
  • 在pcDuino上刷了AndDroid,Ubuntu,XBMC
  • Styling FX Buttons with CSS
  • iptables防火墙详解(一)
  • UVa 208 - Firetruck 回溯+剪枝 数据
  • [C# 开发技巧]如何使不符合要求的元素等于离它最近的一个元素
  • c#本质论吐槽体、鸡血体
  • ×××拨号成功后,同时可以本地上网的网络信息摘要
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 【个人向】《HTTP图解》阅后小结
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • go append函数以及写入
  • Golang-长连接-状态推送
  • input实现文字超出省略号功能
  • JS函数式编程 数组部分风格 ES6版
  • js数组之filter
  • Mocha测试初探
  • Python实现BT种子转化为磁力链接【实战】
  • swift基础之_对象 实例方法 对象方法。
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • Transformer-XL: Unleashing the Potential of Attention Models
  • Vue2 SSR 的优化之旅
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 缓存与缓冲
  • 技术发展面试
  • 前端攻城师
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 一个项目push到多个远程Git仓库
  • 阿里云服务器购买完整流程
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • #100天计划# 2013年9月29日
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #vue3 实现前端下载excel文件模板功能
  • (8)STL算法之替换
  • (层次遍历)104. 二叉树的最大深度
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (接口自动化)Python3操作MySQL数据库
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (算法)Travel Information Center
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转载)利用webkit抓取动态网页和链接
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • []常用AT命令解释()