转--- 常用数据库访问接口介绍(二)

 本文来自:http://yuantaolzu.blog.sohu.com/80847710.html

1.5 ADO

ADO:(ActiveX Data Object)ActiveX数据对象。ADO是微软于1996年冬推出的一种面向对象的、基于COM思想的数据库访问接口。由于OLE DB标准的API是C++ API,只能供C++语言调用(这也是OLEDB没有改名为ActiveX DB的原因,ActiveX是与语言无关的组件技术)。为了使流行的各种编程语言都可以编写符合OLE DB标准的应用程序,微软在OLE DB API之上,提供了一种面向对象、与语言无关的应用编程接口,这就是ActiveX Data Objects,简称ADO。实质上,ADO就是将OLE DB的面向C++的复杂接口封装起来,提供了便于操作的接口。还可以说ADO其实只是一个应用程序层次的界面,它用OLE DB来与数据库通信,ADO为OLEDB提供高层应用API函数。具体见图7所示。

                                    图7 ADO网络结构图

 

 ADO是DAO和RDO的后继产品,它扩展了DAO和RDO所使用的对象模型,因为它包含
更少的对象,更多的属性、方法(和参数)以及事件。微软是打算用它来代替DAO和
RDO的,但实际上AOD 2.0与RDO更为相似,并不包含DAO的所有功能。在使用上一般
具有以下两种层次关系:应用程序 -> ADO -> OLE DB -> ODBC -> 数据源或者应
用程序 -> ADO -> OLE DB -> 数据源。ADO的对象层次图如图8所示。
图8 ADO对象层次图

 

2 数据库访问接口的发展历程

早期的程序员在程序中要连接数据库是非常困难的,每种DBMS产生的数据库文件的格式都不一样,程序员要对他们访问的DBMS的底层API有相当程度的了解,通过API来访问特定的DBMS。这就产生了一个问题,当使用的DBMS改变后,或者用户习惯使用的DBMS与开发程序使用DBMS的不符合时,应用软件便无法正常访问DBMS。因此,能处理各种数据文件的API便产生了,这就是大家都知道的ODBC。ODBC是通用API的早期产物,是基于结构查询语言 (sql) 的,以此作为访问数据的标准。这时大多数DBMS提供了面向ODBC的驱动程序,遵从了这个标准的DBMS被称为ODBC兼容的DBMS。ODBC兼容的数据库包括Access, MS-SQL Server, Oracle, Informix等。 但是ODBC并不完美,他虽然统一了对多种常用DBMS的访问,但是这个“访问”的过程是非常困难的,他仍然存在大量的低级调用,程序员必须将大量的精力放在底层的数据通信中,而不能专注于所要处理的数据。为了改善这种极其不友好的接口,使得在程序开发中,数据库访问的工作更加容易,微软提出里一个解决方案:DAO (Data Access Objects),DAO的代码看起来是这样的:   

objItem.AddNew

objItem.Name = "StudentDB"

objItem.Price = 10

objItem.Update

这说明他的代码更易于掌握,因为它更像是一种面向对象的语言,建立想要使用对象后,可以给他的各种属性赋值,提取各种属性的值,或者使用该对象提供的方法。总之,DAO是第一个面向对象的接口。DAO 最适用于单系统应用程序或小范围本地分布使用。于是为了访问远程DBMS,更好地实现数据共享,或数据的交互操作,比如想要联接查询位于不同地方的主机中的两个数据表,这时产生了一个新的数据库访问接口:RDO(Remote Data Objects),远程数据对象。当然,RDO也是一个面向对象的接口。它同易于使用的 DAO style组合在一起,形式上展示出所有 ODBC 的底层功能和灵活性。RDO 已被证明是许多 SQL Server、Oracle 以及其他大型关系数据库开发者经常选用的最佳接口。RDO 提供了用来访问存储过程和复杂结果集的更多和更复杂的对象、属性,以及方法。但是随着需求的发展,又引出了新的问题。ODBC和RDO数据库接口都需要数据以SQL(Structured Query Language)的格式存储,或者说,要求访问的数据文件都必须是关系类型的,也就是说产生这些文件的DBMS必须是关系数据库。而在平时,我们经常要处理一些非关系数据源,例如Excel电子表格,有规则或无规则的文本文件,XML文件等。针对这个问题,微软提出了OLEDB,一个基于COM标准的数据存取对象。他能提供对所有数据类型的操作,甚至是没有规则的文本文件。

可能是由于两个原因,产生了ADO----微软最新的数据库接口。这两个原因是:1,为了大幅减少数据库访问工作量,提供一个更易于操作,更友好的接口。因为ADO是基于OLEDB的技术,他将OLEDB的功能封装,对用户透明。2,为了整合各种功能于一身,因为ADO是DAO和RDO的后继产物。包含在 DAO 和 RDO 模型中的许多功能被合并为单个对象,这样就生成了一个简单得多的对象模型。ADO “扩展”了 DAO 和 RDO 所使用的对象模型,这意味着它包含较少的对象、更多的属性、方法(和参数),以及事件。

另外还有一种数据访问接口ADO.NET。它与ADO的数据访问方式在思想上是没有继承关系的,ADO是基于COM思想,而ADO.NET是基于.NET框架体系,主要用于基于WEB的应用程序,善于处理XML类型的数据。

由以上论述可以看出:ODBC和OLEDB是底层的数据库接口,他们通过驱动程序访问数据文件,而DAO,RDO,ADO是上层数据库接口,他们向上与应用程序交互,向下与ODBC或OLEDB对话。另外,DAO也可以通过JET引擎访问数据文件。ADO是对OLEDB的封装。

3 常见数据库访问接口的比较

3.1 ODBC与DAO

ODBC类只支持DML(Data Manipulation Language,数据操作语言),不支持DDL,所以用ODBC类只能完成数据的操作,不能涉及数据库的结构。支持DDL是DAO对数据库编程良好支持的一个重要体现。DDL(Data Definition Language)在SQL术语中叫做"数据定义语言",它用来完成生成、修改和删除数据库结构的操作。只要有ODBC驱动程序,DAO就可以访问ODBC数据源。二者都支持对各种ODBC数据源的访问。虽然二者使用的数据引擎不同,但都可以满足用户编写独立于DBMS的应用程序的要求。另外,DAO可以用Jet引擎访问两类数据库而无需通过ODBC驱动,一是*.MDB数据库,Microsoft Access 就是这类数据库,由于DAO是基于Microsoft Jet引擎的,因而在访问Access数据库(即*.MDB文件)时具有很好的性能。二是ISAM数据库,包括Btrieve、dBASEIII、dBASEIV、Microsoft FoxPro。

但DAO是针对VB/Access设计的,它所支持的数据库类型就是VB的那几种,很少见第三方驱动程序。ODBC是开放的数据库接口,几乎支持所有数据库类型,对于很多VB不能很好地支持的数据库类型,如Visual FoxPro 5.0,都可以使用ODBC驱动。一般来说DAO支持本机Access数据库比较理想,但在客户/服务器体系上不如ODBC功能强大。     

3.2 DAO、RDO与ADO

ADO在编程难易程度方面比DAO和RDO都好 (主要得益于简单的对象模型),但是在利用数据库的特性方面与RDO不相上下,但是ADO新版本的性能会比RDO更强。与DAO,RDO模型的层次结构不同,ADO 基本上是一种平板结构:Command 和Recordset 与Connection 之间并没有上下层次关系。换一种说法,DAO或RDO在定义Recordset对象时,必须先定义Connection对象,而ADO则可以不通过Connection而直接定义Recordset对象。ADO是DAO和RDO的后继产物,但是ADO目前还没有包含DAO的所有功能,目前的ADO并不支持数据定义语言(DDL),而我们已经知道DAO是支持DDL的。最终Microsoft承诺将提供一个ADO DDL 部件来帮助进行DAO到ADO的移植,并为OLE DB供应商提供一般的DDL支持。微软已公开表示,今后的微软产品数据访问的接口方面,将统一到OLE DB和ADO 标准上来。

3.3 ADO与ADO.NET

ADO使用OLE DB接口并基于微软的COM技术,而ADO.NET拥有自己的ADO.NET接口并且基于微软的.NET体系架构。这也就是说ADO.NET和ADO的数据访问方式是不同的。在ADO 中,数据的内存中表示形式为记录集Recordset,而在 ADO.NET 中,数据在内存中的形式为数据集Dataset。记录集看起来像单个表,如果要获得几个表的相关数据,必须使用JOIN查询。相反,数据集是一个或多个表的集合。这样,数据集可以模仿基础数据库的结构。ADO 的运作是一种在线方式,他对数据的操作必须是实时的。ADO.NET则使用离线方式,在访问数据的时候ADO.NET会利用XML制作数据的一份幅本,ADO.NET的数据库连接也只有在这段时间需要在线。优点是效率高,在Web上,有上千个并行用户,系统资源是非常昂贵的。

                             图9 常用数据库访问接口比较图

区分你的程序是DAO、RDO,还是ADO的,可以看看打开数据库的方式。DAO使用OpenDatabase方法,RDO使用OpenConnection方法,而ADO一般通过一个ConnectionString来确定数据库的类型和位置。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值