浅谈ADO.NET与ADO!!

ado

最近老是看到有网友问关于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) 较完整(可包括多个数据表,以及其中的关联)系统资源 较浪费(必须一直连接)

时间: 2024-09-29 09:34:18

浅谈ADO.NET与ADO!!的相关文章

浅谈ADO.NET文章系列之二 — 并发更新冲突的处理

ado 声明:这里只对并发冲突做简单的分析,所以在前面冠以"浅谈"二字,希望大家可以从中看到一般的处理方法和注意的事项,如果有什么疏漏,那也相当地自然,毕竟本人水平有限,还有很多需要提高的地方,希望各位朋友不吝指正!一.为什么会产生并发在我们使用ado.net对数据库中数据进行操作时,很有可能这种操作或类似地操作也在网络内其他用户中进行着,那么就难以避免地会遇到更新操作失败的情况.因为为了更好地提高性能,ado.net采用了断开连接的方式.也就是说要先把数据的副本读取到客户端,那么也容

浅谈SQL注入风险 - 一个Login拿下Server(转)

前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查.   可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:"老师你这SQL有注入,随便都能登录了.不能这么写!"   "呦?小伙子这都知道了?那你说说看 啥是注入?注入只能拿来绕过登录么?" 好吧,竟然在老子面前装逼,看来不给你点儿颜色看看,你还真是不明白天有多高..   于是乎..哈哈.大清早的,轻松在班里装了一手好逼..   呵呵.不说了,下面我把

浅谈Oracle数据库的建模与设计_oracle

正在看的ORACLE教程是:浅谈Oracle数据库的建模与设计.要开发一个基于数据库的应用系统,其中最关键的一步就是整个系统所依据的数据库的建模设计,从逻辑的到物理的,一个环节疏于设计,整个的应用系统便似建立在危房之上,随着开发过程的不断深入,它要随时面临着各种难  以预料的风险,开发者要为修改或重新设计没有设计好的数据库系统而付出难以预料的代价.所以,一个良好的数据库设计是高效率的系统所必须的.  一.逻辑建模  数据库设计的方法因具体数据库而异,但是建模阶段的相同的,所以可以用一些通用的工具

浅谈Python中copy()方法的使用

  这篇文章主要介绍了浅谈Python中copy()方法的使用,Python中的拷贝分为潜拷贝和深拷贝,本文只是简单介绍用法,需要的朋友可以参考下 copy()方法返回字典的浅拷贝. 语法 以下是copy()方法的语法: ? 1 dict.copy() 参数 NA 返回值 此方法返回字典的浅拷贝. 例子 下面的例子显示了copy()方法的使用. ? 1 2 3 4 5 6 #!/usr/bin/python   dict1 = {'Name': 'Zara', 'Age': 7};   dict

浅谈document.write()输出样式

  这篇文章主要介绍了浅谈document.write()输出样式,十分的简单实用,有需要的小伙伴可以参考下. js中的最基本的命令之一:document.write(),用于简单的打印内容到页面上,可以逐字打印你需要的内容--document.write("content"),这里content就是需要输出的内容;当然还有一种情况,需要输出JS之中比如变量等等变化的东西,那么就需要用document.write(+variable);当然variable就是你想要输出的变量. 既然可

图标字体化浅谈[转]

在做手机端Web App项目中,经常会遇到小图标在手机上显示比较模糊的问题,经过实践发现了一种比较好的解决方案,图标字体化.在微社区项目中,有很多小的Icon(图 标),如分享.回复.赞.返回.话题.访问.箭头等,这些Icon(图标)一般都是纯色的.开始制作时考虑用双倍大小的Sprite图,通过CSS样式设 置只显示二分之一尺寸,这样在Retina屏上显示的大小是正常的,一旦放大屏幕后图标又变得模糊不清,测试的效果不是很理想,后来又考虑多套图标适配方 案.SVG矢量图等,都因为种种原因放弃掉了(

浅谈PHP5中垃圾回收算法(Garbage Collection)的演化

前言:PHP是一门托管型语言,在PHP编程中程序员不需要手工处理内存资源的分配与释放(使用C编写PHP或Zend扩展除外),这就意味着PHP本身实现了垃圾回收机制(Garbage Collection).现在如果去PHP官方网站(php.net)可以看到,目前PHP5的两个分支版本PHP5.2和PHP5.3是分别更新的,这是因为许多项目仍然使用5.2版本的PHP,而5.3版本对5.2并不是完全兼容.PHP5.3在PHP5.2的基础上做了诸多改进,其中垃圾回收算法就属于一个比较大的改变.本文将分别

浅谈算法和数据结构 十一 哈希表

在前面的系列文章中,依次介绍了基于无序列表的顺序查找,基于有序数组的二分查找,平衡查找树,以及红黑树,下图是他们在平均以及最差情况下的时间复杂度: 可以看到在时间复杂度上,红黑树在平均情况下插入,查找以及删除上都达到了lgN的时间复杂度. 那么有没有查找效率更高的数据结构呢,答案就是本文接下来要介绍了散列表,也叫哈希表(Hash Table) 什么是哈希表 哈希表就是一种以 键-值(key-indexed) 存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值. 哈希的思路很简单

浅谈关于JavaScript API设计的一些建议和准则

  这篇文章主要介绍了浅谈关于JavaScript API设计的一些建议和准则,文中列举了许多知名的JS API进行辅助说明,极力推荐!需要的朋友可以参考下 设计是一个很普遍的概念,一般是可以理解为为即将做的某件事先形成一个计划或框架. (牛津英语词典)中,设计是一种将艺术,体系,硬件或者更多的东西编织到一块的主线.软件设计,特别是作为软件设计的次类的API设计,也是一样的.但是API设计常常很少关注软件发展,因为为其他程序员写代码的重要性要次于应用UI设计和最终用户体验. 但是API设计,作为