引言
在我们进入.net平台以后,我们在做项目的时候就离不开ADO.net了,因为只要我们和数据库打交道,我们就必须利用它,然而我们在VB6.0的时代却一直和ADO做朋友,但是随者Web程序的兴起,我们的编程方式发生了重大的改变,然而传统的传统的数据库连线保存设计法无法适用于此类应用程序,这让ADO应用程序遇到了很大的瓶颈。所谓“时势造英雄”在此恰到的时机,ADO.net就应运而生了。
可能有很多同学对于ADO和ADO.net的一些基本概念不是很清楚,那么我就先简单的介绍一下这两位数据库界的大牛,然后在说明他们之间的关系。
ADO 简介
ADO (ActiveX Data Objects,ActiveX数据对象),它就是Microsoft 提出一个应用程序的接口(API),它的作用就是用来访问关系或非关系的数据库例如,如果您希望编写应用程序从DB2或Oracle数据库中向网页提供数据,可以将ADO程序包括在作为活动服务器页(ASP)的HTML文件中。当用户从网站请求网页时,返回的网页也包括了数据中的相应数据,这些是由于使用了ADO代码的结果。
ADO.net简介
ado.net可让开发人员以一致的方式存取资料来源(例如 SQL Server 与 XML),以及透过 OLE DB 和 ODBC 所公开的资料来源。资料共用的消费者应用程序可使用ado.net 来连接至这些资料来源,并且撷取、处理及更新其中所含的资料,它利用.NET Framework资料提供者和DataSet(数据集)物件,来达到离线房屋内数据库。
作用:它提供了平台互用性和可伸缩的数据访问,ADO .NET增强了对非连接编程模式的支持,并支持RICH XML。由于传送的数据都是XML格式的,因此任何能够读取XML格式的应用程序都可以进行数据处理。事实上,接受数据的组件不一定要是ADO .NET组件,它可以是基于一个Microsoft Visual Studio的解决方案,也可以是任何运行在其它平台上的任何应用程序。
下面我就从以下四个方面来总结一个ADO和ADO.NET的区别:
(1)数据在内存中的表示形式
在ADO中,数据在内存中的表示形式为记录集,而在ADO.net中的表示形式为数据集(DataSet),这两种形式有着很大的不同。
记录集就像单个的表,如果记录集中的数据来自多个数据库表,则它必须使用SQL语句JOIN进行查询,然后将从多个表中得到的数据结合到单个的结果表中,而数据集就是一个小型的数据库,可以有多个表,表和表之间有关系,这样我们可以通关主外键关系查询,可以存储更加丰富的数据结构。
另外,在ADO中,数据导航使用ADO的MoveNext方法顺序扫描记录集的行。而在ADO.net中,行表示为集合,因此可以像以此通过,任何集合那样依次通过表,或者是通过序号索引或主键索引访问特定信息。
(2)对数据库的访问
两者在对数据源不连接处理存在着比较明显的不同,在ADO.net中,在连接数据库以后将行数据读入数据集以后,然后在不与数据源连接的情况下使用它们,也就是说数据集和数据源是独立的,在ADO章是通过调用OLE DB提供程序与数据库通信的,在ADO.NET中是通过数据适配器(OleDbDataAdapter,SqlDbDataAdapter等)与数据库通信这将调用OLEDB提供程序或基础数据源提供的API。在ADO.net中,数据适配器允许控制将多数据集所做的更改传输到数据库的方式。
具体实现对数据库的访问:
(1)使用ADO Connection创建到数据库的连接
(2)执行SQL命令查询数据库表,得到RecordSet记录集
(3)对记录集进行所需的操作
(4)关闭数据库连接
通过ADO.net访问数据库
(1)创建数据库的连接
(2)执行SQL命令得到相关的数据集行
(3)填充数据行到DataSet中
(4)根据需要可反复讲得到的新数据行加入到DataSet中
(5)关闭数据库连接
(6)对DataSet进行所需的操作
从上面的步骤中可以看出,ADO.NET通过引入DataSet数据集概念,改变了以往ADO的访问数据库模式,DataSet是完全不依赖于数据库的独立数据集,关闭数据库连接对数据的操作完全没有影响,实现了真正的非连接编程状态,彻底替代了RecordSet记录集。
(3)RecordSet DataSet DataReader
(4)数据的共享和传输
在应用程序间传输ADO.NET数据集要比传输ADO连接的记录集容易的多,这是因为要将ADO连接的记录集从一个组件传输到另一个组件,则必须使用COM组封送,若要在ADO.NET中传输,则是利用数据集传输XML流。下面做一下比较
1、COM封送提供有限数据类型,该数据类型是用COM标准定义,而ADO.NET数据集是基于XML格式所以对数据类型没有限制,也就是说ADO.NET传送有更丰富的数据类型。
2、在传送大型记录集的时候,虽然两者都最大限度的降低了所传送的数据,但是ADO.NET不需要数据类型转换,所以比ADO更有优势。
3、在传输中防火墙会影响试传输不连接的ADO记录集的两个组件,防火墙通常允许HTML文本通过,但是防止系统级请求(如COM封送)通过,因为组件使用XML交互,所以允许数据集通过。
小结
ADO与ADO.NET既有相似也有区别,他们都能够编写对数据库服务器中的数据进行访问和操作的应用程序,并且易于使用、高速度、低内存支出和占用磁盘空间较少,支持用于建立基于客户端/服务器和 Web 的应用程序的主要功能。但是ADO使用OLE DB接口并基于微软的COM技术,而ADO.NET拥有自己的ADO.NET接口并且基于微软的.NET体系架构。众所周知.NET体系不同于COM体系,ADO.NET接口也就完全不同于ADO和OLE DB接口,这也就是说ADO.NET和ADO是两种数据访问方式。