VC++实现数据库访问

  • 格式:doc
  • 大小:164.00 KB
  • 文档页数:12

一、数据库连接1、标准的访问数据库的技术▲ODBC(Open Database Connectivity,开发数据库互联)ODBC为编写关系数据库的客户软件提供了一种统一的接口。

ODBC提供了一个单一的API,可用于处理不同数据库的客户应用程序。

使用ODBC API的应用程序可以与任何具有ODBC 驱动程序的关系数据库进行通信。

现在,绝大多数关系数据库都提供了ODBC驱动程序,那么我们使用ODBC API就可以访问这些数据库。

ODBC的体系结构如下:我们所编写的客户程序直接和ODBC驱动程序管理器打交道,后者利用ODBC驱动程序所提供的API访问数据库。

在访问不同数据库时,需要指定相应的ODBC驱动程序,而后者又由ODBC程序管理器去调用,它会将客户的请求转换为相应的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进行了扩展。

首先,OLEDB提供了一个数据库编程的COM 接口;第二,OLEDB提供了一个可用于关系型和非关系型数据源的接口,而ODBC只能访问关系型数据库。

通常我们所说的数据库都是指关系型和非关系型数据源的接口,而ODBC 只能访问关系型数据库。

通常我们所说的数据库都是指关系型数据库。

但是数据库的概念,从广义上来说,除了关系型数据库以外,还包括其他格式的数据源,包括电子表格、文本文件。

OLE DB的两个基本结构式OLE DB提供程序和OLE DB用户程序。

OLEDB的功能非常强大,但是它对自动化的支持不是很好。

OLE DB的体系结构如下:▲ADO(AcitveX Data Object,ActiveX数据对象)ADO建立在OLEDB之上。

ADO是一个OLE DB用户程序,即它本身也是一个Consumer。

使用ADO的应用程序都要间接地使用OLE DB。

ADO简化了OLE DB,提供了对自动化的支持,使得像VBScript这样的脚本语言也能使用ADO访问数据库。

采用ADO技术访问数据库的话,实际上调用过程是ADO客户程序通过ADO再访问OLEDB提供程序,所以访问速度要慢些。

但是因为ADO对自动化提供了很好的支持。

该技术很少使用,将逐渐退出历史的舞台。

2、ADO的三个核心对象▲Connection对象:Connection对象表示了到数据库的连接,它管理应用程序和数据库之间的通信。

Recordset 和Command对象都有一个ActiveConnection属性,该属性用来引用Connection对象。

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

▲Recordset对象:Recordset对象被用来获取数据。

Recordset对象存放查询的结果,这些结果由数据的行(称为记录)和列(称为字段)组成。

每一列都存放在Recordset的Fields集合中的一个Field对象中。

3、实例讲解,利用ADO访问数据库(1)、新建一个基于对话框的MFC工程Ado。

设计ID为IDD_ADO_DIALOG的对话框如下:(2)、在编译头文件StdAfx.h中导入ADO库:#import "C:\Program Files\Common Files\System\ado\ msado15.dll" no_namespace rename ("EOF","adoEOF")。

同时将Access数据库Test.mdb复制到该工程的目录下。

说明:no_namespace表示不需要命名空间,主要是为了访问方便,在程序中可以直接访问ADO提供的Connection、Command和Recordset这三个COM接口。

rename将EOF改为adoEOF,因为EOF表示记录集的结尾,文件也是以EOF为结尾的,为了避免冲突,在导入ADO库时,需要将EOF该为adoEOF(该名字由自己定义)。

提示:编译该Ado程序,会在该工程目录下的Debug目录下生成msado15.tlh和msado15.tli,可将msado15.tlh看作是一个头文件,把msado15.tli看作一个源文件。

这两个文件是导入ADO库后,编译器在编译时自动生成的。

(3)、为Query按钮添加单击消息响应函数,利用ADO对象访问数据库:void CAdoDlg::OnBtnQuery(){CoInitialize(NULL);//初始化COM库((CListBox*)GetDlgItem(IDC_LIST1))->ResetContent();//清空编辑框中的数据//_ConnectionPtr是一个智能指针,在msado15.tlh文件中被定义,用该指针定义一个ADO Connection对象,_uuidof获取ADO Connection接口的全局唯一标识符,对pConn对象进行初始化。

_ConnectionPtr pConn(_uuidof(Connection));_RecordsetPtr pRst(_uuidof(Recordset));//产生一个记录集智能指针对象//设置连接字符串,不同的数据库使用不同的连接字符串pConn->ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Test.mdb";pConn->Open("","","",adConnectUnspecified);//上面已经设置了连接字符串,这里所以设置参数为””,adConnectUnspecified表示同步打开连接。

pRst=pConn->Execute("select * from Test",NULL,adCmdText);//从Test表中取出数据,得到记录集数据while(!pRst->adoEOF){//获取Name字段的数据((CListBox*)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)pRst->GetCollect("Name"));pRst->MoveNext();//让游标向下移动}pRst->Close();//关闭记录集pConn->Close();//关闭连接pRst.Release();//释放智能指针在相应COM接口的引用计数pConn.Release();//智能指针在访问其他方法和属性时用箭头指向操作符(->),Release方法释放引用计数时必须使用点操作符(.)。

CoUninitialize();//卸载COM库}(4)、使用记录集智能指针对象直接指向SQL查询语句获取记录集数据将Query按钮的单击消息响应函数OnBtnQuery中的pRst=pConn->Execute("select * from Test",NULL,adCmdText);改为pRst->Open("select * from Test",_variant_t((IDispatch*)pConn),adOpenDynamic,adLockOptimistic,adCmdText);(5)、使用Command智能指针对象访问数据库void CAdoDlg::OnBtnQuery(){CoInitialize(NULL);((CListBox*)GetDlgItem(IDC_LIST1))->ResetContent();_ConnectionPtr pConn(_uuidof(Connection));_RecordsetPtr pRst(_uuidof(Recordset));_CommandPtr pCmd(_uuidof(Command));//构造Command智能指针对象pConn->ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Test.mdb";pConn->Open("","","",adConnectUnspecified);pCmd->put_ActiveConnection(_variant_t((IDispatch*)pConn));//设置活动连接pCmd->CommandText="select * from Test";//设置Command对象的命令文本属性pRst=pCmd->Execute(NULL,NULL,adCmdText);//执行Command对象的Execute方法,将结果赋给记录集对象while(!pRst->adoEOF){((CListBox*)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)pRst->GetCollect("Name"));pRst->MoveNext();}pRst->Close();pConn->Close();pRst.Release();pConn.Release();CoUninitialize();}二、访问数据库,以ACCESS数据库为例1、创建ACCESS数据库(1)、打开Microsoft Office Access,新建Access数据库stu.mdb。

(2)、在stu.mdb中新建一张表stu,在该表中有字符串类型的学号stuNo,字符串类型的姓名stuName、字符串类型的性别stuSex。

其中stuNo是主键。

2、利用ODBC访问Access数据库(1)、新建单文档类型的MFC工程MFCODBC。