Username: Password:

ADO.NET深入研究(1)[特别推荐]-.NET教程,数据库应用
来源:作者: 发布时间:2007-12-26 02:11:49

导 读:.net 在数据存取方面做了很大的调整。在.net 框架下,数据存取是由ado.net来完成的,这是个ado的改进和完善版本。他最显著的变化是其完全基于xml。而对于从事ado研发的人员来说,recordset对象的消失也令他们感到惊奇。

--------------------------------------------------------------------------------

翻译整理:.net技术网(www.51dotnet.com)slash
原文出处:http://www.dnjonline.com/articles/essentials/iss22_essentials.html

.net 在数据存取方面做了很大的调整。在.net 框架下,数据存取是由ado.net来完成的,这是个ado的改进和完善版本。他最显著的变化是其完全基于xml。而对于从事ado研发的人员来说,recordset对象的消失也令他们感到惊奇。

微软对recordset 对象的看法是:他相对于最初的为了产生一个sql查询的结果的机制,显得有些过于臃肿了。因此,在ado.net中,recordset对象的功能将被拆分到三个部分中去。首先是datareader对象, 他所要完成的功能是将数据简单的表现出来;在ado中,类似功能是由向前的、服务器端的光标(forward-only, server-side cursor)来实现的。然后是dataset 和 datasetcommand 对象,他们能够在客户端创建一个或一个以上的数据集合的缓存,并对他们进行操作。在ado中,客户端光标的使用相对比较单一化,而在这方面ado.net则分别赋予这两个对象不同的功能,从而使他们具备更加专一而强大的功能。最后,是其他一些在ado中能够实现的功能,比如说,利用connection对象在保守锁定的情况下进行数据的更新。这是在ado.net中无法实现的功能,这意味着在某些时候,ado将被继续使用。

在进入dataset的讨论之前,我们先来简单的来看一看ado.net。

使用datareader

ado.net提供了三个类:dbconnection, dbcommand 和 dbdatareader,他们和传统的ado对象十分的相似。但是在.net应用程式中他们不能被直接使用。能够使用的是从他们继承而来的类,比如adoconnection, adocommand 和 adodatareader来读取数据,这里的前提是存在一个oledb的provider。假如要操作的对象是sql server,那么将使用另一些功能相同的类sqlconnection, sqlcommand 和 sqldatareader 以便直接通过sql server 的 tds 连接通道来获得更好的工作性能。下面是个例子(因为在这里c#和vb.net的代码区分不是很大,所以将只使用vb.net的实例):

imports system.data
imports system.data.ado
..
dim cn as new adoconnection()
cn.connectionstring = strconnect

try
cn.open()
dim cd as new adocommand(?elect * from authors? cn)
dim dr as adodatareader
cd.execute(dr)
while dr.read()
listbox1.items.add(dr(?u_lname?)
end while
catch err as exception
msgbox(err.tostring)
finally
if cn.state = dbobjectstate.open then cn.close()
end try
在上面您会发现在while loop语句中没有出现movenext方法,因为datareader的read方法将自动前移光标,并会在没有数据的时候返回一个false值。这显然减轻了研发者的工作量。

在两种情况下,datareader被推荐使用:一、客户界面利用手写代码,或是没有用到数据绑定并且数据的更新是利用手写的sql语句或是存储过程,这种情况下,datareader将提供有效的访问相关数据的方法;二、一个需要查看数据库状态的的过程,但无需实现诸如自动更新的功能。一些比较好的应用实例有向下拉菜单填充数据,连同产品编号的验证。

理解datasets

对于一些研发者来说,可能会对datasets的使用颇有微词,但事实上,掌控他并不难。假如您对连接断开的recordset 模式,连同分层的recordset 的使用不陌生,并且乐于使用一些xml的话,那么利用datasets 就没有什么困难了。

可是有什么必要去花费时间去重新学习一种对象模型呢?
理由之一是,ado.net 力推的断开连接模式(disconnected model)是很有意义的。断开连接的数据伸缩性更高,因为这种模式对数据服务器的压力比较小。通过平行服务器对中间层进行扩展比对数据层进行扩展要容易的多,因此对于可扩展的应用程式来说,对数据层资源的使用要谨慎。断开连接模式将在这里得到应用。
理由二,在数据管理方面,断开连接模式有很广阔的前景。

假如说有一种技术的 发展比ado还要迅速,这就是xml。xml解决了两个ado所对的局限。
1、xml更加适用和跨平台的的数据传输,因为他能够穿越防火墙。
2、xml比ado包括他的扩展ado2.5描述的类型多。一个简单的例子,同样面对扁平的数据,普通的xml将比ado显示出更高的效率。

datasets是xml和ado结合的产物,他的一个重要的特点是和数据库或sql无关。他只是简单的对数据表进行操作,交换数据或是将数据绑定到用户界面上。

向datasets中加入数据表的方法有两种:
1、利用datasetcommand对象,他能够以xml 的形式返回一个数据库查询的结果。在处理数据库更新的时候,这种方法和ado的客户端光标基本相同,但提供更强的控制。
2、直接对xml数据进行操作。dataset 对象有对xml数据和schemas进行读写的的方法,并且能够和xmldatadocument对象(该对象是多用途xmldocument类的继承)紧密的结合起来工作,他具备一些对扁平数据操作的特别函数因此能够作为从dataset 到通用xml dom的桥梁。

下面是一段使用dataset的代码:
dim dc as new adodatasetcommand( _
"select au_id, au_fname, au_lname from authors" & _
" where au_lname = ‘ringer’", strconnect)
dim ds as new dataset()

dc.filldataset(ds, "authors")
msgbox(ds.xmlschema, , "xml schema")
msgbox(ds.xmldata, , "xml data")

以上的代码将一个‘authors’数据表填充到dataset 对象实例 ds 中,并显示了xml数据和schemas,请看两个显示结果:表1 和 表2

向dataset中添加数据表的操作是很容易的,请看下面的代码:

dc = new adodatasetcommand( _
"select * from titleauthor" & _
" where title_id like ps%", strconnect)

dc.filldataset(ds, "titles")
msgbox(ds.xmldata, , "xml data")




表1显示xml schema




表2显示dataset 对象生成的数据




未 完 待 续

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅