ADO与ADO.NET
(摘录自ASP.NET 3.5 开发大全)
一、 ADO与ADO.NET
ADO.NET相比于ADO有很大的改进。使用ADO.NET,能够更加容易的进行数据库的开发,其中,一部分是针对开发人员做出的更改,包括易用性、适用性等,其次的更改让ADO.NET相比于ADO,更加灵活、强大、易于升级使用。
二、 ADO概述
微软公司的ADO(ActiveX Data Objects)是一个用于存取数据源的COM组件。它提供了编程语言和统一数据访问方式OLEDB的一个中间层。允许开发人员编写访问数据的代码而不用关心数据库是如何实现的,而只用关心到数据库的连接。访问数据库的时候,关于SQL的知识不是必要的,但是特定数据库支持的SQL命令仍可以通过ADO中的命令对象来执行。
在开发过程中,ADO为OLEDB数据提供给予COM的应用程序级别的接口,对数据库的操作进行了封装,ADO支持各种开发者的需要。同时,ADO也能够像ADO.NET一样构建客户端记录集,使用松耦合记录集,并处理OLEDB的数据整形集合。
相比于ADO.NET,ADO还支持一些特殊的方法,例如可滚动的服务器端游标MOVENEXT。但是,使用服务器游标需要使用和保存数据库资源,所以当大量的游标在服务器端被使用时,则可能对应用程序的性能和可缩放性产生极大的负面影响。使用ADO,还需要对防火墙进行配置以启用COM的发送请求才能够进行数据交互,这样可能造成一定的安全问题。ADO编程模型如下所示:
1、 连接数据源(Connection),可选择开始事务。
2、 可选择创建表示SQL命令的对象(Command)。
3、可选择指定列、表,以及 SQL 命令中的值作为变量参数(Parameter)。
4、 执行命令(Command、Connection或Recordset)。
5、 如果命令以行返回,将行存储在存储对象中(Recordset)。
6、 可选择创建存储对象的视图以便进行排序、筛选和定位数据(Recordset)。
7、 编辑数据。可以添加、删除或更改行、列(Recordset)。
8、在适当情况下,可以使用存储对象中的变更对数据源进行更新(Recordset)。
9、 在使用事务之后,可以接受或拒绝在事务中所做的更改。结束事务(Connection)。
从上述的编程模型可以看出,ADO.NET在很多方面和ADO比较相近,但是ADO.NET并不是ADO的.NET版本,ADO和ADO.NET是两种不同的数据访问方式。
三、 ADO.NET与ADO
ADO.NET的名称起源于ADO(ActiveX Data Objects),ADO用于在以往的Microsoft技术中进行数据的访问。所以微软希望通过使用ADO.NET名称来向开发人员表明,这是在.NET编程环境和Windows环境中优先使用的数据访问接口。
ADO.NET提供了平台互用性和可伸缩的数据访问,ADO.NET增强了对非连接编程模式是支持,并支持RICH XML。由于传送的数据都是XML格式的,因此任何能够读取XML格式的应用程序都可以进行数据处理。事实上,接受数据的组件不一定要是ADO.NET组件,它可以是基于一个Microsoft Visual Studio的解决方案,也可以是任何运行在其他平台上的任何应用程序。
可以说传统的ADO和ADO.NET是两种不同的数据访问方式,无论是在内存中保存数据,还是打开和关闭数据库的操作模式都不尽相同。
1.数据在内存中的存在形式
使用ADO.NET时,数据保存在内存中并且是以DataSet数据集的形式存放在内存中,而ADO中,则是以RecordSet记录集的形式存放在内存中。
在ASP的开发过程中,连接数据库后,通常将查询操作的数据的集合保存在记录集中,并使用MOVENEXT等方法进行遍历,也可以使用其他的方法进行查询,提取任意行。而在ASP.NET中,ADO.NET提供的DataRelation对象维护有关主记录和详细资料记录的信息,并提供方法使用户可以获取与正在操作的记录相关的记录。
2.数据的表现形式
在ADO中,记录集的表现形式像一个表。如果需要包含来自多个数据库的表的数据,就必须使用复杂的SQL语句中的JOIN查询将各个数据库的表的数据组合到单个记录集中。
而在ADO.NET中,数据集本身是一个表或多个表的集合。相对于记录集而言,数据集可以保存多个独立的表并维护有关表之间关系的信息。因此,ADO.NET能够维护和保存数据结构复杂的表,模仿数据库的结构,例如表的自关联,以及有一对多或多对多的关系表。
3.数据的连接和断开
ADO是为连接的访问而设计的,相比之下,ADO.NET打开连接的时间仅仅足够数据库的操作。数据集可以将行读入,然后断开与数据库的连接,再对数据集中记录进行更改。当需要将数据集中的资源更新到数据库时,ADO.NET再与数据库连接并更新。
4.数据共享
再ADO中,如果需要实现ADO.NET中断开数据连接传送数据的功能,则必须在COM组件之间互相传送,这样就造成了安全性问题。在杀毒软件中,一些杀毒软件可能会默认禁止COM组件之间的通信,这样就造成了开发人员的维护困难。而ADO.NET能够使用DataSet传送数据而不需要考虑防火墙的限制,是因为DataSet传送的数据集会被转换成XML流来传送。ADO.NET相对于ADO再数据共享上,有如下优点:
突破COM数据类型的限制:由于ADO.NET基于XML流传送数据,所以对数据类型没有限制。
减少数据类型的转换:ADO.NET相对于ADO而言,减少了大量的数据类型的转换,提高了性能。
可以穿透防火墙:基于XML流传送数据的方法能够轻松穿透防火墙。
5.构架设计
在构架设计上ADO.NET与ADO也是不同的,ADO.NET相对于ADO更加方便和简洁,从设计的角度上来说,ADO.NET设计的更加完善。
在ADO中,通过使用ADORecordSet对象进行数据的连接和操作,ADORecordSet对象是一个庞大的对象,它提供了多种类型的游标能力,例如快速的即时的游标到无连接的客户端游标。但是使用ADORecordSet对象,很难对数据的操作的方法进行自定义。而在ADO.NET中,ADO.NET将ADO中ADORecordSet对象的方法进行了一个拆分,将其中的若干功能分成多个类,通过类之间的调用来实现。这样就方便了开发人员自定义数据的连接和操作。
注意:在应用程序中,ADO与ADO.NET是可以共存的,因为在.NET中同样可以使用COM互操作服务使用ADO。
四、 ADO.NET 常用对象
ADO.NET提供了一些常用对象来方便开发人员进行数据库的操作,这些常用的对象通常会使用在应用程序开发中,对于中级的开发人员而言,熟练的掌握这些常用的ADO.NET对象,能够自行封装数据库操作类,来简化开发。ADO.NET的常用对象包括:
1、 Connection对象。
2、 DataAdapter对象。
3、Command对象。
4、DataSet对象。
5、 DataReader对象。
上面的对象在.NET应用程序操作数据中是非常重要的,它们不仅提供了数据操作的便利,同时,还提供了高级的功能给开发人员。为开发人员解决特定的需求。