MFC实现SQL数据库ADO连接

更新时间:2023-10-06 23:46:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

广工大学城15物联网4 Wisdom整理(原文档来源:http://blog.csdn.net/wxlcx/article/details/4872053)

VC MFC实现SQL数据库ADO连接(完整版)

关于vc6.0中实现ADO SQL数据库连接的文章网上虽然很多,但大多写的很繁琐,对于我们这样的菜鸟来说,还是很希望有一篇简单化的文章的。希望跟我一样的菜鸟们学得开心!

源代码文件链接:

http://pan.http://www.wodefanwen.com//s/1eR9icyY

概述:

要在一个vc工程中实现数据库的连接,最好的方式是在新建一个用于连接数据库的类比如ADOConn,需要连接数据库的时候将这个类实例化就可以了。

操作:新建一个ADOConn的对象,比如ADOConn ac;。然后再引用些对象就可以实现相应的操作了。

实践过程:

(一) 目的:封装一个自己的类。

在vc6.0中新建一个基于对话框的mfc工程,然后点击菜单栏->插入->类(mfc类)。 然后在“类的类型”中选择Generic Class,名称为ADOConn。

此后会在vc左边视窗的“Source Files”中多出一个ADOConn.cpp的文件,在\Files\中多出一个“ADOCon.h”的文件。

如果是用VS2013来创建工程的情况:

VS2013中添加类:

·1·

广工大学城15物联网4 Wisdom整理(原文档来源:http://blog.csdn.net/wxlcx/article/details/4872053)

右击myMFC(新建的项目)——添加——类—— MFC类。

(二)打开ADOConn.h(即编辑ADOConn类的头文件)

(1)在第一行加入(用于vc支持ado连接) #import

\

Files\\Common

Files\\System\\ado\\msado15.dll\

no_namespace

rename(\

//不要命名空间,重命名EOF为adoEOF,rename的意思就是改名了,rename(\将EOF改名为adoEOF,以免和C语言里的EOF重名。

这句话意味使用msado15.dll动态连接库文件,里面就有ADO.

如果存在问题:用VS2010的C++导入ADO导入不了,提示无法打开源文件msado15.tlh”的问题。 解决办法很简单:

在生成菜单--- 重新生成 --- 即可。 原因是:

当编译器遇到#import语句时,它会为引用组件类型库中的接口生成包装类,#import语句实际上相当于执行了API涵LoadTypeLib()。

#import语句会在工程可执行程序输出目录中产生两个文件,分别为*.tlh(类型库头文件)及*.tli(类型库实现文件),它们分别为每一个接口产生智能指针,并为各种接口方法、枚举类型,CLSID等进行声明,创建一系列包装方法。在没有经过编译器编译之前,文件还没有生成,所以,会出现错误提示。

(2)在class ADOConn类体中添加如下代码 public: // 定义变量

_ConnectionPtrm_pConnection; _RecordsetPtrm_pRecordset;

// 初始化—连接数据库 void OnInitADOConn();

// 执行查询

_RecordsetPtr&GetRecordSet(_bstr_tbstrSQL);

// 执行SQL语句,Insert Update _variant_t BOOL ExecuteSQL(_bstr_tbstrSQL); void ExitConnect();

·2·

广工大学城15物联网4 Wisdom整理(原文档来源:http://blog.csdn.net/wxlcx/article/details/4872053)

至此ADOConn.h的操作完成。

(三)打开ADOConn.cpp(逐个实现其头文件ADOConn.h中定义但末实现的方法),将如下代码拷入文件末尾。

// 初始化—连接数据库(实现方法) void ADOConn::OnInitADOConn() { }

//执行查询

_RecordsetPtr&ADOConn::GetRecordSet(_bstr_tbstrSQL){

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

//创建connection对象( 创建连接对象实例) m_pConnection.CreateInstance(\

// 设置连接字符串,必须是BSTR型或者_bstr_t类型

m_pConnection->Open(strConnect, \ //连接数据库 }

//捕捉错误

catch (_com_error e) //捕获错误 { //显示错误信息 }

AfxMessageBox(e.Description());

_bstr_tstrConnect=\

try { }

//捕捉异常 catch (_com_error e)

·3·

//连接数据库,如果connection为空,则重新连接 if (m_pConnection == NULL)

OnInitADOConn(); //创建记录集对象

m_pRecordset.CreateInstance(__uuidof(Recordset)); //取得表中的记录

m_pRecordset->Open(bstrSQL, m_pConnection.GetInterfacePtr(),

adOpenDynamic, adLockOptimistic, adCmdText);

广工大学城15物联网4 Wisdom整理(原文档来源:http://blog.csdn.net/wxlcx/article/details/4872053)

}

{ }

//返回记录集 return m_pRecordset;

//显示错误信息

AfxMessageBox(e.Description());

// 执行SQL语句,Insert Update _variant_t BOOL ADOConn::ExecuteSQL(_bstr_tbstrSQL) { }

void ADOConn::ExitConnect() {

// 关闭记录集和连接 if (m_pRecordset != NULL)

m_pRecordset->Close(); m_pConnection->Close();

·4·

// _variant_tRecordsAffected; try { }

catch (_com_error e) { }

AfxMessageBox(e.Description()); return false;

// 判断是否已经连接数据库 if (m_pConnection == NULL)

OnInitADOConn();

// Connection对象的Execute方法:(_bstr_tCommandText, // VARIANT * RecordsAffected, long Options )

// 其中CommandText是命令字串,通常是SQL命令。 // 参数RecordsAffected是操作完成后所影响的行数,

// 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名 // adCmdProc-存储过程;adCmdUnknown-未知 m_pConnection->Execute(bstrSQL, NULL, adCmdText); return true;

广工大学城15物联网4 Wisdom整理(原文档来源:http://blog.csdn.net/wxlcx/article/details/4872053)

}

// 释放环境 ::CoUninitialize();

这段代码涉及到获取数据库连接中会出现的异常,并进行处理,不用过于深究其作用,等数据库连接成功后再慢慢研究。

此段代码中有些地方要根据自己数据库的配置情况,进行适当的改动。需要改动的代码为: _bstr_tstrConnect = ??pwd=123456;\ 根据自己的实际数据库情况进行修改 如:

_bstr_tstrConnect pwd=1234;\

Provider不用改,Server是服务器的名称,怎么查看呢?

打开sqlmanagementstudio连接进行后在左边的“对象资源管理器”中会看到服务器的名称。 我的叫DESKTOP-80T6JHL;Database是要连接到的数据库名称。比如我在management studio中新建了一个数据库table1;uid=登陆服务器的用户名;pwd=这个用户名的密码,我的密码是123456;到这里就完成了此段代码的修改了。

(四)保存以上文件。即完成了sql ado连接类ADOConn的编辑。

比如我要在telbookDlg.cpp中需要连接到数据库, 只需要引用如下代码: ADOConn ac;//实例化对象

ac.OnInitADOConn()://连接

_bstr t vs;//定义一个变量用于存放你自己编写的sql命令

vs=\向vs中写入要执行的sql命令 ac. ExecuteSQL (vs)://调用ac的ExecuteSQL()函数执行sql命令 ac. ExitConnect ();//操作完成后,断开与数据库连接

到此,实现ado sql数据库的功能。

·5·

= \Server= DESKTOP-80T6JHL;Database=table1; uid=sa;

本文来源:https://www.bwwdw.com/article/177d.html

Top