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

相关文章
|
11天前
|
JavaScript 关系型数据库 API
Nest.js 实战 (二):如何使用 Prisma 和连接 PostgreSQL 数据库
这篇文章介绍了什么是Prisma以及如何在Node.js和TypeScript后端应用中使用它。Prisma是一个开源的下一代ORM,包含PrismaClient、PrismaMigrate、PrismaStudio等部分。文章详细叙述了安装PrismaCLI和依赖包、初始化Prisma、连接数据库、定义Prisma模型、创建Prisma模块的过程,并对比了Prisma和Sequelize在Nest.js中的使用体验,认为Prisma更加便捷高效,没有繁琐的配置。
Nest.js 实战 (二):如何使用 Prisma 和连接 PostgreSQL 数据库
|
2天前
|
SQL 关系型数据库 MySQL
如何在PHP中连接到数据库?
在PHP中连接MySQL数据库常用的方法是MySQLi与PDO。MySQLi专为MySQL设计,支持面向对象及过程化编程,并提供预处理语句防止SQL注入。
|
9天前
|
缓存 分布式计算 DataWorks
DataWorks操作报错合集之连接数据库时出现了通信链接失败的报错,该如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
9天前
|
SQL DataWorks Java
DataWorks操作报错合集之在与某个数据库服务器建立或保持通信连接时遇到报错,该如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
17天前
|
ARouter 关系型数据库 MySQL
Django项目同时连接多个不同的数据库(7)
【7月更文挑战第7天】在Django项目中配置连接多个数据库,你需要: 1. 在`settings.py`中配置多个数据库, 2. 在`settings.py`内设置数据库路由,指定每个应用使用的数据库,
34 2
|
21天前
|
前端开发 NoSQL 数据库
部署常用的流程,可以用后端,连接宝塔,将IP地址修改好,本地只要连接好了,在本地上前后端跑起来,前端能够跑起来,改好了config.js资料,后端修改好数据库和连接redis,本地上跑成功了,再改
部署常用的流程,可以用后端,连接宝塔,将IP地址修改好,本地只要连接好了,在本地上前后端跑起来,前端能够跑起来,改好了config.js资料,后端修改好数据库和连接redis,本地上跑成功了,再改
|
21天前
|
弹性计算 NoSQL 网络安全
软件开发常见之云数据库Redis连接不上如何解决,修改配置后,需要重启下redis服务,配置才能生效呢,是重启,而不是重载配置,最后导致的问题是点击了的重启,配置修改了之后必须点击重启,而不是修改
软件开发常见之云数据库Redis连接不上如何解决,修改配置后,需要重启下redis服务,配置才能生效呢,是重启,而不是重载配置,最后导致的问题是点击了的重启,配置修改了之后必须点击重启,而不是修改
|
2天前
|
Oracle 关系型数据库 MySQL
入职必会-开发环境搭建17-IDEA连接数据库
IntelliJ IDEA集成了众多插件,方便开发者使用,使用IDEA自带的Database模块就可以很方便的配置、连接数据库,在 IntelliJ IDEA 中连接数据库,可以按照以下步骤进行操作。
|
26天前
|
Java 关系型数据库 MySQL
使用MySQL JDBC连接数据库
使用MySQL JDBC连接数据库
|
5天前
|
SQL 数据库 数据安全/隐私保护
为什么程序连接不同的数据库要使用不同的账号
为什么程序连接不同的数据库要使用不同的账号