开发平台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库 }