ADO.NET的开发场景及传统ADO的处理

当转为使用ADO.NET时,您将需要了解如何应对以前知道用ADO处理而现在必须用ADO.NET解决的场景。就像使用Visual Basic、C++和ASP开发的N层解决方案经常要依赖ADO来满足数据访问需要一样,Windows?窗体、Web窗体和Web服务也要依赖ADO.NET。我曾经从使用传统ADO开发的角度讨论了如何使用ADO.NET来处理一些数据访问的场景。其中的一些主题包括将行集保留为XML、处理只进流水游标和执行Command对象的多种方式。在文中,我将继续讨论使用ADO.NET的开发场景,以及使用传统的ADO技术是如何处理的。我将从经常使用的传统ADO的只进、静态、键集和动态游标的情况开始讨论。我还要讨论如何处理并发性问题,以及断开连接的行集如何从ADO演变到ADO.NET。然后,我会说明如何将使用传统的ADO处理批量更新的代码转换为使用ADO.NET(用DataAdapter及其四个命令对象)的代码。

分散Recordset的功能

在ADO.NET中,ADO Recordset的大多数功能都分到了三个主要对象中:DataReader、DataSet和DataAdapter(参见图1)。

图1 ADO Recordset

ADO.NET DataReader对象被设计成服务器端的只进、只读游标。ADO.NET DataSet对象是行集断开连接的存储工具。它存储记录,但不持有与数据源的连接,事实上,它并不关心其行集从哪个数据源派生。DataSet在内存中存储时是一个二进制对象,但是它可以轻松地从XML序列化和序列化为XML。这与ADO Recordset对象从其相关联的Connection对象断开连接(通过Recordset的ActiveConnection属性)时将CursorType设置为adOpenStatic、将CursorLocation设置为adUseClient是类似的。ADO.NET DataAdapter对象是连接与DataSet对象之间的桥梁,它可以通过一个连接从数据源加载一个DataSet,并用DataSet中存储的已更改的内容更新数据源。ADO Recordset的行为取决于其属性的设置(包括CursorType和CursorLocation属性)。在ADO.NET中构建了不同的对象来处理这些特定的情况,而无需用一个对象来应对所有情况。

流水游标

传统的ADO公开了四个不同类型的游标,可以改变ADO Recordset对象的运作方式。ADO Recordset对象的行为方式因其CursorType属性的设置情况互不相同,可能有非常大的差异。例如,通过将CursorType设置为adOpenForwardOnly,Recordset可保持与其数据源的连接,而且必须按只进方向进行遍历。然而,当您将CursorType属性设置为adOpenDynamic时,Recordset可向前或者向后遍历,甚至可以使游标跳到某个特定行。通过其CursorType和CursorLocation属性,ADO Recordset对象采用了一种将许多解决方案包装到单个对象中的方式。而ADO.NET采用的方法则不相同,它设计由不同的对象和方法来处理各种特定情况。在传统的ADO中,只进、只读游标是通过将CursorType设置为adOpenForwardOnly、将CursorLocation设置为adUseServer(这也是默认设置)实现的,这将使Recordset对象采用只进的服务器端游标形式。MoveNext方法将Recordset重定位到下一行,而MovePrevious方法则根本不允许使用,但是可以调用Recordset的MoveFirst方法。这有些容易引起误解,因为该方法并不将Recordset重定位到当前行集的开始;相反,它调用原来的SQL语句,从头开始重新填充Recordset,因此会再次移动到第一个记录。每次执行传统ADO Recordset的MoveFirst方法时(CursorType设置为adOpenForwardOnly),通过打开SQL事件探查器工具,观察SQL的执行情况,可以很容易地看到这一点。在需要逐个遍历成千上万(乃至更多)行中的每行或者在需要小一些的行集但是只需遍历一次(可能为了加载到一个选取列表)时,这种游标是非常常用的:

'-- Forward-only Firehose Cursor in ASP and ADO
Set oRs.ActiveConnection = oCn
oRs.LockType = adLockReadOnly
oRs.CursorType = adOpenForwardOnly
oRs.CursorLocation = adUseServer
oRs.Open sSQL

最接近这种传统的ADO流水游标的等效物是ADO.NET DataReader对象。和传统的只进ADO Recordset一样,DataReader在打开的同时保持着与其数据源的连接,而且只能以前进的方向进行遍历。但是,它们还是有区别的。区别之一是,专门为某个data provider(如SQL Server?(SqlDataReader类)或者ODBC数据源(OdbcDataReader类))编写单独的DataReader类型。ADO.NET DataReader对象非常高效,这是因为它是专门为实现只进、只读游标这一目的而构建的。传统ADO的只进游标是通过相同的Recordset对象(作为一个断开连接的Recordset甚至是一个数据源敏感的Recordset)实现的。而DataReader只是为了作为轻型流水游标而设计的。

//-- ASP.NET and ADO.NET in C#
SqlDataReader oDr = oCmd.ExecuteReader();

时间: 2024-08-27 09:54:54

ADO.NET的开发场景及传统ADO的处理的相关文章

NET高级开发一:用VB.net+ADO.NET+SQLServer开发三层架构的运用程序

ado|server|sqlserver|程序|高级|架构      NET高级开发一:用VB.net+ADO.Net+SQL Server开发三层架构的运用程序 一:什么是三层体系结构:    三层体系结构,顾名思义,我们将运用程序从整体上分为三个独立而又彼此相关联的层次,这三层分别是:用户层.业务逻辑层.数据层 .用户层就是运用程序与用户的操作接口,比如说:网页.在用户层,常用到的技术如:HTML.CSS.JavaScript.ASP/asp.net等.业务逻辑层 就是将一些业务处理的逻辑与

VC开发数据库基础之ADO篇

一.ADO简介 ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术,请不必为此担心,即使你对OLE DB,COM不了解也能轻松对付ADO,因为它非常简单易用,甚至比你以往所接触的ODBC API.DAO.RDO都要容易使用,并不失灵活性.本文将详细地介绍在VC下如何使用ADO来进行数据库应用程序开发,并给出示例代码. 本文示例代码 二.基本流程 万事开头难,任何一种新技术对于初学者来说最重要的还是"入门&q

总结:ADO.NET在开发中的部分使用方法和技巧

ado|技巧 如何使用 SqlDataAdapter 来检索多个行 以下代码阐明了如何使用 SqlDataAdapter 对象发出可生成 DataSet 或 DataTable 的命令.它从 SQL Server Northwind 数据库中检索一组产品类别. using System.Data;using System.Data.SqlClient;public DataTable RetrieveRowsWithDataTable(){ using ( SqlConnection conn

ADO.NET与ORM的比较 (1)ADO.NET实现CRUD

说明:个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是 Spring+Struts+Hibernate,除了在学习基础知识的时候被告知可以使用JDBC操 作数据库之外,大量的书籍中都是讲述使用Hibernate这个ORM工具来操作数据. 在.NET中操作数据库的方式有多种,除了最直接的方式就是使用ADO.NET之外, 还可以使用NHibernate这个Hibernate在.NET中的实现ORM,如果你对第三方的 ORM持怀疑态度,你还可以使用来自微软的实现.根正苗红的Linq

微聚双十一脱单派对通过场景弥补传统社交缺陷

生活在城市的"剩斗士"们日益萎缩的社交圈子,而硬着头皮上婚网站又是一件让年轻人觉得很LOW的事儿.各种三姑六婆的催婚,让白领们心里非常不畅快.如何让缘分变成一件水到渠成的事儿,快速脱单.微聚作为一款有有趣的移动交友软件,无疑为这个市场找到了一条不错的路子.据悉,微聚在双十一"光棍节"的晚上发起了一场主题为"微聚·脱单大逃亡"的线下活动,希望在单身狂欢之夜,通过微聚平台上发起这样正能量的缘分配对活动,帮助单身的伙伴能拓展自己的社交圈,遇见属于自己的

ADO编程应用(2)

ado|编程 下面是一个简单的采用了#import方法的基于ADO应用的示例代码: #include <windows.h> #import <msado15.dll> rename("EOF", "adoEOF") void main() { HRESULT hr = S_OK; //因为没有在#import中指定no_namespace,所以必须采用ADODB::这样的形式来定义变量类型 ADODB::_RecordsetPtr Rs1

使用强类型数据集进行有效编码——转载

曾经有人告诉我优秀的开发人员的特点是希望能够有效地利用时间.开发人员不断追求更容易更快速的编码方式,以及减少错误数量的方法.使用 ADO.NET 中的强类型数据集对象可以帮助您做到这一点. 本月我将从正反两方面来讨论使用强类型数据集对象开发基于 Microsoft .NET Framework 的应用程序.我将从什么是强类型数据集及其如何扩展数据集.数据表和 DataRow 类开始谈起.在这一部分中,我将提到一个示例应用程序,它包括使用强类型数据集在 SQL Server Northwind 数

从 ADO“经典”迁移到 ADO.NET

ado 本文摘自 Hitchhiker's Guide to Visual Studio and SQL Server 2005(7th Edition) William VaughnBeta V Corporation 适用于Microsoft ADO.NETMicrosoft SQL Server 2005(代号"Yukon")Microsoft Visual Studio 2005(代号"Whidbey") 摘要:Bill Vaughn 讨论了 Visual

ADO.NET快速起步

ado ADO.NET是微软的Microsoft ActiveX Data Objects (ADO)的下一代产品,是在微软的.NET中创建分布式和数据共享应用程序的应用程序开发接口(API). ADO.NET能被用在任何用户的应用程序,需要和OLE DB-compliant的数据源连接和通讯,例如Microsoft SQL Server. 同时ADO.NET又保持着与以前的ADO模型有关的一些主要概念,它已经被极大的完善,并从不同的信息来源提供途径去获得结构化的数据----一个平台文本文件,从