[摘 要]随着数据库产品和技术的发展,数据库访问技术也从ODBC、DAO、RDO、OLE DB、ADO 和 RDS发展到今天的ADO.NET。本文尽量用通俗易讲的语言介绍了这种演进过程,希望能够对程序设计的初学者有所帮助。
[关键词]访问技术;ODBC;OLE DB;ADO;ADO.NET
[中图分类号]TP39 [文献标识码]A
引言
数据库产品和技术发展很快,从关系数据库到非关系数据存储区(如电子邮件和文件系统),数据访问技术必须始终追随技术的飞速变化。并且,随着客户端服务器及多层应用程序结构的出现,现在开发人员必须了解多种数据访问技术,常用的数据库访问技术有:ODBC、DAO、RDO、OLE DB、ADO、RDS、ADO.NET等。了解数据访问技术是如何演进的,以及每项技术应运而生的理由,将有助于为自己的系统构建选择合适的技术并对其进行优化。
1 ODBC(Open Database Connectivity,开放数据库互连)
Interface 1992年Microsoft和Sybase、Digital共同制定了ODBC标准接口,以单一的ODBC API 来存取各种不同的数据库。随后ODBC便获得了许多数据库厂商的支持而逐渐成为标准的数据存取技术。
一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是FoxPro、Access还是Oracle数据库,均可用ODBC API进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。ODBC由用户应用程序、驱动程序管理器、驱动程序和数据源等部分组成。如图所示。
ODBC连接仅仅限于关系型数据库,对于其他数据源比如EXCEL、文本文件都不能进行访问,而且有很多DBMS(数据库管理系统)都不能充分的支持其所有的功能。
2 DAO (Data Access Object,数据访问对象)
1993年Microsoft为了让程序员能够存取Access数据库,使用OLE Automation技术封装了Jet Engine。这些使用Jet Engine存取Access数据库的OLE Automation Object便称为DAO。它允许访问和处理本地数据库,象access,缺点是不能访问远程数据库。因此DAO在存取Access数据库时非常有效率,但是在存取其他的数据源时却表现得不怎么好。所以如果数据库是Access数据库且是本地使用的话,建议使用这种访问方式。
3 RDO(Remote Data Objects,远程数据对象)
由于DAO在结合ODBC存取关系数据库时表现得并不好,因此在1995年Microsoft同样以OLE Automation 技术直接封装ODBC API ,让程序员能够存取关系数据库。这种数据存取技术便称为Remote Data Object(RDO)。
Microsoft之所以推出RDO,是因为ODBC API 是非常复杂的API,许多程序员无法直接使用ODBC API 来开发应用程序,因此Microsoft以简化的RDO对象让程序员能够较为简单存取数据。此外,通过RDO脚本语言也能够存取各种关系数据库。不过目前RDO也已经逐渐地被放弃了,因此建议各位也不要在新的项目中使用RDO,毕竟RDO只能算是一个过渡性质的数据存取解决方案。
4 OLE DB(Objects Link Embed DataBase,对象链接和嵌入数据库)
随着数据源日益复杂化,现今的应用程序很可能需要从不同的数据源取得数据,加以处理,再把处理过的数据输出到另外一个数据源中。更麻烦的是这些数据源可能不是传统的关系数据库,而可能是Excel文件,Email或Internet/Intranet上的电子签名信息。Microsoft为了让应用程序能够以统一的方式存取各种不同的数据源,在1997年提出了Universal Data Access(UDA)架构。UDA以COM技术为核心,协助程序员存取企业中各类不同的数据源。UDA以OLE DB(属于操作系统层次的软件)做为技术的骨架。OLE DB定义了统一的COM接口做为存取各类异质数据源的标准,并且封装在一组COM对象之中。藉由OLE DB,程序员就可以使用一致的方式来存取各种数据。
相比之下,OLE DB可以存取任何形式的数据,所以其功能是相当的强大,它也指导了目前技术发展的方向。
5 ADO(ActiveX Data Object,ActiveX数据对象)
ADO是Microsoft在1996年冬被发布的,是 DAO/RDO的后继产物,是一个用于存取数据源的COM组件。ADO"扩展"了DAO和 RDO 所使用的对象模型,这意味着它包含较少的对象、更多的属性、方法(和参数),以及事件。
作为最新的数据库访问模式,ADO的使用也是简单易用,所以微软已经明确表示今后把重点放在ADO上,对DAO/RDO不再作升级,所以ADO已经成为了当前数据库开发的主流,是VB6推荐操作数据库的方式。
应用程序连接到数据库可采取的许多途径。例如,VB程序员可以使用ADO将应用程序连接到OLEDB提供程序。如果数据库不支持OLEDB,应用程序可以通过ODBC连接。VisualC++(VC++)程序员可以使用ADO或直接通过OLEDB连接。
6 RDS (Remote Data Services,远程数据服务)
ADO 虽然能够提供强大的数据访问功能, 但是它不支持远程数据的操作, 服务器上的数据库与客户端上的数据不能实现同步更新, 需要在客户端上修改数据库中的数据, 就必须构造修改数据的SQL 语句来执行相应的编辑。
RDS 比ADO 更进一步, 服务器端的数据库与客户端的数据保持同步更新, 在客户端进行了数据的修改后, 只要调用一个数据库更新命令就可以将客户端对数据的修改反映到数据库中, 就像使用本地数据库一样。RDS的角色就象是一位帮ADO存取WEB数据库的服务员一样,所以取名“远程端数据服务”
远程数据服务RDS和ADO的关系:
程序<->ADO<->RDS<->IIS/PWS<->ODBC<->数据源
7 ADO.NET(ActiveX Data Object.NET,ActiveX数据对象.NET)
尽管ADO.NET和ADO在名称上还看似有一些联系,但实际上ADO.NET是全新的技术。至于微软将其命名为ADO.NET,很大程度上更是基于商业运作的考虑,因为ADO技术太深入人心,命名为ADO.NET无疑将吸引那些曾经使用过ADO技术的程序开发人员。
ADO.NET并没有完全抛弃ADO的技术,所以学习过ADO的程序开发人员掌握ADO.NET也会比较容易。
ADO.NET 满足了 ADO 无法满足的三个重要需求:提供了断开的数据访问模型,这对 Web 环境至关重要;提供了与 XML 的紧密集成;还提供了与 .NET 框架的无缝集成(例如,兼容基类库类型系统)。
下图显示了 ADO.NET 的结构,但缺少了能够在 ADO 中执行诸多功能的记录集对象。要想使用 ADO.NET 必须要安装 “NET框架”和 “ASPNET”环境。