VC MFC实现SQL数据库ADO连接(完整版)关于vc6.0中实现ADO SQL数据库连接的文章网上虽然很多,但大多写的很繁琐,对于我们这样的菜鸟来说,还是很希望有一篇简单化的文章的。
希望跟我一样的菜鸟们学得开心!
源代码文件链接:
概述:
要在一个vc工程中实现数据库的连接,最好的方式是在新建一个用于连接数据库的类比如ADOConn,需要连接数据库的时候将这个类实例化就可以了。
操作:新建一个ADOConn的对象,比如ADOConn ac;。
然后再引用些对象就可以实现相应的操作了。
实践过程:
(一)目的:封装一个自己的类。
在vc6.0中新建一个基于对话框的mfc工程,然后点击菜单栏->插入->类(mfc类)。
然后在“类的类型”中选择Generic Class,名称为ADOConn。
此后会在vc左边视窗的“Source Files”中多出一个ADOConn.cpp的文件,在"Header
Files"中多出一个“ADOCon.h”的文件。
如果是用VS2013来创建工程的情况:
VS2013中添加类:
右击myMFC(新建的项目)——添加——类——MFC类。
(二)打开ADOConn.h(即编辑ADOConn类的头文件)
(1)在第一行加入(用于vc支持ado连接)
这句话意味使用msado15.dll动态连接库文件,里面就有ADO.
如果存在问题:用VS2010的C++导入ADO导入不了,提示无法打开源文件msado15.tlh”的问题。
解决办法很简单:
在生成菜单--- 重新生成 --- 即可。
原因是:
当编译器遇到#import语句时,它会为引用组件类型库中的接口生成包装类,#import语句实际上相当于执行了API涵LoadTypeLib()。
#import语句会在工程可执行程序输出目录中产生两个文件,分别为*.tlh(类型库头文件)及*.tli(类型库实现文件),它们分别为每一个接口产生智能指针,并为各种接口方法、枚举类型,CLSID 等进行声明,创建一系列包装方法。
在没有经过编译器编译之前,文件还没有生成,所以,会出现错误提示。
(2)在class ADOConn类体中添加如下代码
至此ADOConn.h的操作完成。
(三)打开ADOConn.cpp(逐个实现其头文件ADOConn.h中定义但末实现的方法),将如下代码拷入文件末尾。
这段代码涉及到获取数据库连接中会出现的异常,并进行处理,不用过于深究其作用,等数据库连接成功后再慢慢研究。
此段代码中有些地方要根据自己数据库的配置情况,进行适当的改动。
需要改动的代码为:
如:
Provider不用改,Server是服务器的名称,怎么查看呢?
打开sql managementstudio连接进行后在左边的“对象资源管理器”中会看到服务器的名称。
我的叫DESKTOP-80T6JHL; Database是要连接到的数据库名称。
比如我在management studio中新建了一个数据库table1; uid=登陆服务器的用户名;pwd=这个用户名的密码,我的密码是123456;到这里就完成了此段代码的修改了。
(四) 保存以上文件。
即完成了sql ado连接类ADOConn的编辑。
比如我要在telbookDlg.cpp中需要连接到数据库,只需要引用如下代码:
到此,实现ado sql数据库的功能。
知识点补充:
要插入数据可以调用下面的语句:
其他说明:判断数据库连接是否成功的函数:
详解MFC使用ADO连接SQLServer数据库
VC用ADO访问数据库全攻略,介绍了VC用ADO来访问数据库的各个对象及各方法,很经典,也很实用,很值得一看。
一、ADO概述
ADO是Microsoft为最新和最强大的数据访问范例OLE DB 而设计的,是一个便于使用的应用程序层接口。
ADO 最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。
二、在VC中使用ADO接口技术
1、引入ADO库文件
使用ADO前必须在工程的stdafx.h头文件里的顶头引入ADO库文件,以使编译器能正确编译。
用#import引入ADO库文件
这行语句声明在工程中使用ADO,但不使用ADO的名字空间,并且为了避免常数冲突,将常数EOF 改名为adoEOF。
现在不需添加另外的头文件,就可以使用ADO接口了。
2、初始化OLE/COM库环境
必须注意的是,ADO库是一组COM动态库,这意味应用程序在调用ADO前,必须初始化OLE/COM 库环境。
在MFC应用程序里,一个比较好的方法是在应用程序主类的:OnInitADOConn成员函数里初始化OLE/COM库环境。
(详细代码见上边的例子)
3、ADO接口简介
ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。
_ConnectionPtr接口返回一个记录集或一个空指针。
通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。
使用_ConnectionPtr接口返回一个记录集不是一个好的使用方法。
对于要返回记录的操作通常用_RecordsetPtr 来实现。
而用_ConnectionPtr操作时要想得到记录条数得遍历所有记录,而用_RecordsetPtr时不需要。
_CommandPtr接口返回一个记录集。
它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。
在使用_CommandPtr接口时,你可以利用全局_ConnectionPtr接口,也可以在_CommandPtr 接口里直接使用连接串。
如果你只执行一次或几次数据访问操作,后者是比较好的选择。
但如果你要频繁访问数据库,并要返回很多记录集,那么,你应该使用全局_ConnectionPtr接口创建一个数据连接,
然后使用_CommandPtr接口执行存储过程和SQL语句。
_RecordsetPtr是一个记录集对象。
与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。
同_CommandPtr接口一样,它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给_RecordsetPtr的connection成员变量,让它自己创建数据连接。
如果你要使用多个记录集,最好的方法是同Command对象一样使用已经创建了数据连接的全局_ConnectionPtr 接口,然后使用_RecordsetPtr执行存储过程和SQL语句。
4、使用_ConnectionPtr接口
_ConnectionPtr主要是一个连接接口,取得与数据库的连接。
它的连接字符串可以是自己直接写,也可以指向一个ODBC DSN。
剩下部分资料,见:
好吧,直接来个例子吧:
//使用时注意代码中我的说明!!因为要修改一些内容!因为每个人登录数据库的登录信息,链接的数据库名均不一样,所以要修改!!。