|
从 ADO 迁移到 ADO.NET(一)
原著:John Papa
翻译:sages 逆风编程技术
原文出处:MSDN
Magazine Jul 2004(Data Points)
近年来,在基于 Windows 的应用程序中,作为实现数据存取的首选方法,ADO 起着举足轻重的作用。目前有大量 ADO 应用程序在使用中,同时大量的开发人员
都通晓 ADO 的开发。随着.NET
Framework的出现,ADO 的改进版 ADO.NET 也随之出炉。尽管 ADO 和 ADO.NET 之间有许多相似之处,但二者的操作方法
以及实现基础有很大的差别。为了帮助你实现向 ADO.NET 的平滑迁移,我们是考察一下在 ADO.NET 中如何实现某些公共任务。
我将讨论几种数据访问方案,演示如何利用 ADO 来实现这些方案,同时演示如何用C#在 ASP.NET 中借助 ADO.NET 来解决同样的问题。我
将从二者与数据源连接的相似之处开始,继而我将细致地探讨 ADO 的 Recordset 对象如何演变发展为 ADO.NET 中许多与众不同的面向对象和方法
的特性。最后,我将揭示 firehose 游标,如何从行集中返回一个单值,以及如何处理 XML 等。
ADO 的演变
有些传统的 ADO 特性,如建立与数据源的连接在两个 ADO 版本之间改变很小。其它一些功能则变化很大,譬如表示一个非连接的行集(rowset),将行集保存为XML,将行集转化为一个层次行集(hierarchical
rowset)。促成这些重大改变的一个原因是在 ADO 后期引入 XML 和数据整形(data-shaping)特性,而在 ADO.NET
里,这些特性在当初设计时就将这些特性内建在其中了。
与更早的数据访问工具如 DAO 和 RDO 相比,传统的 ADO 是很轻量级的,而使 ADO 能在n层应用程序开发中和 Visual Basic 6.0 一起得以流行的原因之一
是其简单性、易于导航的对象模式。ADO 的 Connection、Command 对象以相对比较直白的方式转变为 ADO.NET 的 Connection
、Command 对象,但是 ADO 的 Recordset 对象的特性转换到 ADO.NET 中后变成了几个不同的对象和方法。
ADO 之所以成为一个强大而通用的数据访问工具,部分原因是其对 XML 的支持以及管理非连接行集的能力。ADO 的 Recordset 可以
是与其数据源断开连接的,只要将其 CursorLocation 属性设置为 adUseClient,将 CursorType 属性设置为 adOpenStatic,
将 LockType 属性设置为 adLockBatchOptimistic 即可。一旦记录集(recordset)被打开和加载后,通过将其 ActiveConnection 属性
设置为 Nothing,使记录集保持为非连接状态。
''''---Disconnecting an ADO Recordset
oRs.CursorLocation = adUseClient
oRs.CursorType = adOpenStatic
oRs.LockType = adLockBatchOptimistic
''''— Or use adLockReadOnly
oRS.OpenSet
oRS.ActiveConnection = Nothing
起初 XML 功能并未集成在 ADO 中,随着 XML 的流行,在 ADO 后期版本中增加了对 XML 的支持。ADO Recordset 对象中的 Save 方法可以将记录集的行和列保存为一个预定义的 XML
大纲(schema),并将其保存为一个文件或流。使用 XML 大纲并不灵活,但是这是试图将一个 ADO 行集(rowset)保存为 XML 的第一次尝试,并且让开发者对未来的开发方向有个较清晰的认识。Recordset 也可以从一个 XML 文件中加载,前提是其使用同样的XML大纲。下列代码演示 ADO 如何将一个记录集保存为一个 XML 文件:
.Save "c:\MyRowSet.xml", adPersistXML 类似于 ASP 页面上的 Response 对象输出,行集可以保存为一个流。例如,
某些 ASP 代码可以接受一个请求,检索一个行集,将行集以流的形式发送给 Response 对象,后者将结果返给客户端。下列代码演示如何将一个记录集的内容保存为一个 Stream 对象。也可以将 Save 方法的第一个参数置为 Response 对象,这样就可以将 XML 行集流输出给浏览器: 本文章更多内容:1 - 2 - 3 - 4 - 下一页>> |