最近老是看到有网友问关于ADO.NET和ADO的区别和好坏问题,想想自己在刚接触.NET时确实
也有此疑问,现将我的一点理解和体会写来,希望能对大家有点帮助! 其实大部分东西还是来
自MSDN!!
ADO
对于用本机代码编写的应用程序,ADO 为 OLE DB 数据提供程序提供基于 COM 的应用程序级别
接口。与 ADO.NET 相似,ADO 支持各种开发需要,包括使用与关系数据库和其他存储区中的数
据的活连接来创建前端数据库客户端和中间层业务对象。而且,像 ADO.NET一样,ADO可构建客
户端记录集、使用松耦合记录集、处理 OLE DB 的数据整形行集合。
ADO还支持一些不通过 ADO.NET公开的行为,如可滚动的服务器端游标。然而,因为服务器端游
标需要保存数据库资源,所以使用它们可能会对应用程序的性能和可缩放性产生极大的负面影
响。为了通过防火墙传输 ADO 记录集,您需要配置防火墙以启用 COM 封送请求,并考虑相关的
安全后果。COM封送处理还将数据类型限制为COM标准定义的那些数据类型。可选择以 XML格式保
持 ADO 记录集并传输 XML 文本。
ADO.NET
是重要的应用程序级接口,用于在 Microsoft .NET 平台中提供数据访问服务。在 ADO.NET中,
可以使用新的 .NET Framework 数据提供程序来访问数据源。这些数据提供程序包括:
SQL Server .NET Framework 数据提供程序。
OLE DB .NET Framework 数据提供程序。
ODBC .NET Framework 数据提供程序。
Oracle .NET Framework 数据提供程序。
这些数据提供程序可以满足各种开发要求,包括中间层业务对象(它们使用与关系数据库和其他
存储区中的数据的活动连接)。
ADO.NET 是专为基于消息的 Web应用程序而设计的,同时还能为其他应用程序结构提供较好的功
能。通过支持对数据的松耦合访问,ADO.NET 减少了与数据库的活动连接数目(即减少了多个用
户争用数据库服务器上的有限资源的可能性),从而实现了最大程度的数据共享。
ADO.NET 提供几种数据访问方法。在有些情况下,Web 应用程序或 XML Web services 需要访问
多个源中的数据,或者需要与其他应用程序(包括本地和远程应用程序)进行互操作,或者可受
益于保持和传输缓存结果,这时使用数据集将是一个明智的选择。作为一种替换方法,ADO.NET
提供数据命令和数据读取器以便与数据源直接通信。使用数据命令和数据读取器直接进行的数据
库操作包括:运行查询和存储过程、创建数据库对象、使用 DDL 命令直接更新和删除。
ADO.NET 还通过对分布式 ADO.NET 应用程序的基本对象“数据集”(Dataset) 支持基于 XML 的
持久性和传输格式,来实现最大程度的数据共享。数据集是一种关系数据结构,可使用 XML进行
读取、写入或序列化。ADO.NET 数据集使得生成要求应用程序层与多个 Web站点之间进行松耦合
数据交换的应用程序变得很方便。
因为数据集被远程处理为 XML 形式,所以任何两个组件都可共享数据并使用 XML 架构来定义数
据集的关系结构。而且,因为数据集的序列化格式是XML,所以DataSet对象可轻松穿过防火墙,
而不受任何限制。除了从XML加载数据以外,数据集还可用SQL Server中的数据以及通过 OLE DB
公开的数据源中的数据来填充,并可保存对这些数据的更改。
数据集的一个主要特性是可用两种方式访问和操作本地数据集内的数据:
作为关系数据库中的表----数据集可以包含一个表或表的集合。数据集的一个重要特征是,它会
跟踪其所包含的表之间的关系,就好像它是内存中的关系数据存储区。
作为 XML(可扩展标记语言)结构----数据集中的数据还可按照 XML数据的形式访问。提供了完
成以下操作的方法:以 XML 形式读取和写入数据;以 XML 架构形式读取和写入数据集的结构。
此外,为了允许进行同步查看、查询和修改 XML 形式的数据,可将 XmlDataDocument 与数据集
相关联。
选择 ADO.NET 或 ADO
ADO.NET 和 ADO都具有以下特点:易于编程;与语言无关;实现过程简单;使用最小网络流量;
应用程序前端和数据源之间需要的层数很少。两种方法都可提供高性能的数据访问。
无论您选择这两种数据访问技术中的哪一种,都会影响应用程序的设计、扩展性、互操作性、易
于维护性以及其他许多方面。这些方面包括:
托管代码 如果您的应用程序是用托管代码编写的,并且基于公用语言运行库构建,则应使用
ADO.NET。如果是用 C++ 编写非托管代码(尤其是在维护现有的 ADO应用程序时),ADO仍是一
个不错的选择。数据结构 ADO.NET 数据集可包含一个或多个表,并同时提供基于表的关系视
图和基于 XML 的视图。数据集使用标准的公共语言运行库类型,这可简化编程过程。
ADO 记录集是单个表,只能以记录集形式访问,并且不包含关系。ADO 记录集可以是多表 JOIN
查询的结果,但它仍只是单个结果表。如果希望 ADO 具有多个表,必须拥有多个 Recordset 对
象。由于其集成的关系结构,ADO.NET 数据集可提供更好的功能。
数据共享 ADO.NET 为组件间以及跨层的数据交换提供基础:数据集可以 XML 的形式在 Inte-
rnet上传递,并可通过防火墙。可以在您的应用程序内以关系表的形式查看数据集,而在其他一
些应用程序中以 XML数据结构的形式查看同一数据集。数据集提供方便的双向转换:从数据集表
到 XML 文档,以及从 XML 文档到数据集表。
如果使用 COM 封送处理传输 ADO 记录集,目标应用程序必须编写成使用记录集数据结构。与只
读取 XML 数据相比较,它所要求的编程难度更大。或者,可以将 ADO 记录集保持为 XML,这样
可以更方便地与其他应用程序和服务共享数据。
可缩放性 ADO.NET 是缩放性最强的解决方案。ADO.NET从一开始就被设计为这样一种数据访问
结构,即用来生成具有较低总拥有成本的可缩放 Web应用程序的最佳数据访问结构。如果您不需
要可缩放性并且不用托管代码编写,则可继续使用ADO。游标位置 应用程序可以在以下两个位
置中的任一处建立结果集:在应用程序进程内(客户端游标)或数据存储区进程内(服务器端游
标)。对于任意类型的用户与数据的即兴交互,客户端游标通常是很好的选择。客户端游标在
ADO.NET 中由 DataSet 对象支持,而在 ADO 中则由 ClientCursor Recordset 对象支持。顺序
的、只读服务器游标在ADO.NET中由数据读取器(如 SqlDataReader 或 OleDbDataReader对象)
支持,而在 ADO 中则由只进/只读 Recordset对象支持。顺序的、只读游标为从数据库中读出数
据提供最快的方法。
可滚动、可更新的服务器端游标在 ADO中由可滚动、可更新的 Recordset对象支持。应谨慎使用
服务器端游标。通过服务器端游标进行的针对结果的非顺序滚动和更新操作会保持锁定并导致资
源争用,这将大大限制应用程序的可缩放性。不使用可滚动、可更新的服务器端游标,而在服务
器上对结果的过程处理使用存储过程,应用程序通常会获益。
数据访问连接 ADO.NET 和 ADO 都支持到数据库的显式连接。在 ADO.NET中,开发人员可使用
数据读取器,同时基于当前位置保持锁定状态,并且在读取数据前需要到数据库的连续连接。或
者,数据可放到数据集中。使用数据集时,开发人员可进行以下选择:修改数据集中的数据时保
持连接和事务处于打开状态;或者只在需要将数据填充到数据集并将更改更新回数据库时才打开
连接并使用事务。当正在传输、查看和修改数据集中的数据时,关闭连接可为其他用户释放资源
和锁定。在 ADO中,记录集可在用户通读数据库中的数据时使用打开的连接并保持锁定,或者使
用客户端游标记录集,这样可在不保留数据库连接的情况下处理数据。
数据滚动 ADO.NET 和 ADO 既可按顺序浏览数据,也可不按顺序浏览数据。使用 ADO.NET数据
集,还可以方便地从一个数据表中的一行浏览到另一个表中的相关行。ADO记录集和 ADO.NET 数
据阅读器都支持高速、只能向前、只读的服务器端游标。ADO 记录集唯一支持可滚动、可更新的
服务器端游标,尽管这种游标使用服务器资源,并且大多数情况下可以更好地以存储过程中的逻
辑的形式实现,或者以松耦合的客户端游标的形式实现。
使用简易 ADO.NET数据集提供自我描述的数据,并免除了处理基础数据构造(如表、列、约束
和行)的需要。相反,利用数据集,可使用对象对数据进行类型安全的访问。这使得程序更易读
、写和修改。由于应用程序层可以通过 XML格式的数据集交换数据,因此在应用程序的生命周期
中可以方便地实现新的扩展通信。使用 ADO.NET时,使用哪种语言进行数据访问无关紧要:它们
在语法上都是类似的,并使用相同的公共语言运行库服务。
虽然 ADO.NET 和 ADO 都支持松耦合的数据访问,但二者存在差异。利用 ADO.NET,可通过修改
DataAdapter 对象使用的语句,或通过插入可响应行更新事件的自定义代码,来控制数据集更改
传输到数据库的方式。使用该功能可以优化性能、修改验证检查或添加其他任何额外处理,所有
这些操作都不必更改您的应用程序。有关更多信息,请参见 .NET 应用程序结构中的问题。
ADO与ADO.NET的比较
----------------------------------------------------------
项目 ADO ADO.NET
——————————————————————————————————————————————————————————
数据更新 直接处理 类似批处理
数据访问速度 较慢 快(因为在内存中)
对于数据记录的访问 Recordset DataSet.Tables(“数据表名称“)
数据搜索 Recordset.find DataSet.Tables(“数据表名称“).select
数据遍历 Recordset.MoveNext MyDataSet.Tables(“数据表名称“).Rows(I+=1)
一个字段 Recordset.fields(“字段名称“) MyDataSet.Tables(“数据表名称“).Rows(x,y)
通用性 较难在主机间传递 可以转成XML在网络间传递(可越过防火墙)
数据表达 较单纯(仅View和Table) 较完整(可包括多个数据表,以及其中的关联)
系统资源 较浪费(必须一直连接) 较节省(可仅用DataSet操作、关闭连接)