MFC利用ADO技术访问数据库(c++)


 

开发平台VS2012

 

ODBC(Open Database Connectivity),开放数据库互连。ODBC是上个世纪八十年代末九十年代初出现的技术,它为编写关系数据库的客户软件提供了一种统一的接口。ODBC提供一个单一的API,可用于处理不同数据库的客户应用程序。使用ODBC API的应用程序可以与任何具有ODBC驱动程序的关系数据库进行通信。

 

DAO(Data Access Object),数据访问对象。DAO就是一组Microsoft Access/Jet数据库引擎的COM自动化接口。 DAO不像ODBC那样是面向C/C++程序员的,它是微软提供给Visual Basic开发人员的一种简单的数据访问方法,用于操纵Access数据库。

 

RDO(Remote Data Object),远程数据对象。由于RDO直接调用ODBC API(而不是像DAO那样通过Jet引擎),所以,可以为使用关系数据库的应用程序提供更好的性能。

 

 

OLE DB,对象链接与嵌入数据库。 OLE DB在两个方面对ODBC进行了扩展。首先, OLE DB提供了一个数据库编程的COM接口;第二, OLE DB提供了一个可用于关系型和非关系型数据源的接口。 OLE DB的两个基本结构是OLE DB提供程序(Provider)和OLE DB用户程序(Consumer)。

 

ADO(ActiveX Data Object),ActiveX数据对象,它建立在OLE DB之上。ADO是一个OLE DB用户程序。使用ADO的应用程序都要间接地使用OLE DB。ADO简化了OLE DB,提供了对自动化的支持,使得像VBScript这样的脚本语言也能够使用ADO访问数据库。

 

ADO的三个核心对象

Connection对象

Connection对象表示了到数据库的连接,它管理应用程序和数据库之间的通信。 Recordset和Command对象都有一个ActiveConnection属性,该属性用来引用Connection对象。

 

Command对象

Command对象被用来处理重复执行的查询,或处理需要检查在存储过程调用中的输出或返回参数的值的查询。

 

Recordset对象

Recordset对象被用来获取数据。 Recordset对象存放查询的结果,这些结果由数据的行(称为记录)和列(称为字段)组成。每一列都存放在Recordset的Fields集合中的一个Field对象中。

 

 

首先创建一个MFC基于对话框的程序,然后添加一个列表框和一个按钮

将按钮的属性修改为如下

在vs中我们要利用ADO访问数据库我们首先需要导入一个ADO库,这个库是一个动态链接库

这个库的路径:

C:\Program Files\Common Files\System\ado\msado15.dll

我们需要在stdafx.h预编译头文件中导入这个库

代码如下

 

// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件

#pragma once

#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN            // 从 Windows 头中排除极少使用的资料
#endif

#include "targetver.h"

#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // 某些 CString 构造函数将是显式的

// 关闭 MFC 对某些常见但经常可放心忽略的警告消息的隐藏
#define _AFX_ALL_WARNINGS

#include <afxwin.h>         // MFC 核心组件和标准组件
#include <afxext.h>         // MFC 扩展


#include <afxdisp.h>        // MFC 自动化类


#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "rsEOF")
#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h>           // MFC 对 Internet Explorer 4 公共控件的支持
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>             // MFC 对 Windows 公共控件的支持
#endif // _AFX_NO_AFXCMN_SUPPORT

#include <afxcontrolbars.h>     // 功能区和控件条的 MFC 支持

然后编译一下会出现下面的错误

解决方案

生成->重新生成 就没问题了

 

然后双击对话框上面的查询按钮创建它的消息响应函数

 

OLE DB是基于COM技术编写的ADO是基于OLE DB基础之上,它是OLE DB用户程序,ADO也是一个COM组件

我们在使用COM组件的时候需要先初始化一个COM库要初始化COM库需要用到下面函数

void CAdoDlg::OnBnClickedBtnQuery()
{
	// TODO: 在此添加控件通知处理程序代码
	CoInitialize(NULL);//初始化COM库

	CoUninitialize();//卸载COM库

}

使用完COM库后需要卸载COM库

接下来我们就开始访问数据库

void CAdoDlg::OnBnClickedBtnQuery()
{
	// TODO: 在此添加控件通知处理程序代码
	CoInitialize(NULL);//初始化COM库
	_ConnectionPtr pConn(__uuidof(Connection));
	//_ConnectionPtr是一个智能指针类
	//__uuidof获取Connection接口的全局唯一标识符
	//产生了一个Connection智能指针对象
	_RecordsetPtr pRst(__uuidof(Recordset));
	//产生一个记录集的智能指针对象
	pConn->ConnectionString = _T("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Test;Data Source=ELITE");//存储连接字串的变量
	pConn->Open("", "", "", adConnectUnspecified);
	//打开到数据库的连接

	pRst = pConn->Execute("select * from Table_1", NULL, adCmdText);
	while(!pRst->rsEOF)
	{
		((CListBox *)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)(pRst->GetCollect("name")));
		pRst->MoveNext();
	}
	pRst->Close();//关闭记录集
	pConn->Close();//关闭连接
	pRst.Release();
	pConn.Release();
	CoUninitialize();//卸载COM库

}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM