大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> NET专区 -> ADO.NET深入研究(2)[特别推荐]

ADO.NET深入研究(2)[特别推荐]

时间: 2021-07-31 作者:daque

导 读:.net 在数据存取上面做了很大的安排。在.net 框架下,数据存取是由ado.net来实行的,这是一个ado的矫正和完备本子。它最明显的变革是其实足鉴于xml。而对于从事ado开拓的职员来说,recordset东西的消逝也令她们感触诧异。 --------------------------------------------------------------------------------翻译整治:.net本领网(www.51dotnet.com)slash 原文根源:http://www.dnjonline.com/articles/essentials/iss22_essentials.html表4表露了dataset 中现有的数据。不妨创造此刻有两种数据典型,同声schema 也做了相映的安排来刻画这两种数据典型。 请提防咱们此刻并没有做创造一个内贯穿或外贯穿,而是一致于用shape 谈话用两个独立的表创造了一个分级的recordset东西。固然你也不妨创造贯穿,这在dataset中展现为一个表。 ado开拓者在操纵recordset 东西的功夫,须要领会她们究竟须要一个存户端仍旧效劳器端的光标。movefirst 或是 absoluteposition之类的操纵,在效劳器端光目标情景下将耗费很大的效劳器资源,但在存户端光目标情景下,确是高效和有力的东西。两类光标生存着宏大的分别。一个存户端光目标recordset 东西究竟上更一致于一个高本能的数组,而不是逐一种序列化的存取构造。 与之对立,dataset 一直是'存户端的',而且不妨表现'高本能数组'存取模子的最高功效。在recordset 中有字段汇合,但对于一个recordset 东西,却没有相映的汇合。而dataset中的一切表都有一个列和一个行的汇合,你不妨运用大略的随机存取本领来操纵它们,表5表露了在ado.net 中操纵dataset的东西模子。 经过轮回的办法你不妨对datatable中的每一前进行操纵,但是我鄙人一个例子中沿用了另一种本领:datatable 的 select 本领。这是一个重载本领,从实质上去说,它十分于贯串了recordset的filter 和 sort 属性。select 本领归来一个以datarow东西为元素的数组--不妨运用规范的数组的本领对它处置。须要提防的是一切那些进程是在你步调的缓存中举行的,dataset 仍旧和数据源实足的割断了。 底下的示例代码向dataset中弥补两个数据表(第二个表没有运用 where 子句)而后用select 本领从'authors'归来一个数组,并运用该截止创造一个动静的下拉列表。dim dc as new adodatasetcommand( _"select au_id, au_fname," & _" au_lname from authors", strconnect)dim ds as new dataset()' declare an array of datarowsdim dr() as datarowdim i as integerdc.filldataset(ds, "authors")dc = new adodatasetcommand( _"select * from titleauthor", strconnect)dc.filldataset(ds, "titles")dr = ds.tables("authors").select( _"au_lname >= 'r'", "au_lname asc")for i = 0 to ubound(dr)listbox1.items.add( _cstr(dr(i)("au_fname")) & " " _& cstr(dr(i)("au_lname")))next 在这边,select 语句归来一切的行,个中的 last name 的打头假名在 'r'之前,而且对那些前进行了分门别类,'titles'表在这边被忽视了 表之间的接洽 即使你没有运用shape language 举行过处事,你很大概不过创造一个具有一个数据表的 dataset 并对其举行操纵,就象recordset 东西一律。当你一旦向dataset 中介入了多个表,你会蓄意在它们之间创造关系再不于操纵。在底下的代码中,假设以与上例实足沟通的本领创造了一个名为ds的dataset 东西:dim dr() as datarowdim drchildren() as datarowdim dl as datarelationdim i, j as integerdl = new datarelation("authortitles", _ds.tables("authors").columns("au_id"), _ds.tables("titles").columns("au_id"))ds.relations.add(dl)dr = ds.tables("authors").select( _"au_lname >= 'r'", "au_lname asc")for i = 0 to ubound(dr)listbox1.items.add( _cstr(dr(i)("au_fname")) & " " _& cstr(dr(i)("au_lname")))drchildren = dr(i).getchildrows(dl)for j = 0 to ubound(drchildren)listbox1.items.add(" " & _cstr(drchildren(j)("title_id")))nextnextdatasetcommands表 6: 运用list box表露两个表的一多联系这段代码在'authors' 表和 'titles'表之间创造了一个爷儿俩联系的关系,这是经过创造一个datarelation东西(定名为dl)并将它介入dataset实行的。关系指定 au_id 为要害字段,经过对联表('titles')中 au_id 的配合来获得父表中每一条龙的子行。在ado 数据挑选的shape 谈话中是,这是经过 relate 语句来实行的。 当你指定了父表中的行时,你不妨运用这种关系。你不妨经过getchildrows本领获得一切子表中一切关系的行,固然这边的关系联系是由你来确定的。datarelations 使得创造一个master-detail步调变的特殊大略。上头的代码的表露截止见表6。 底下咱们来领会一下adodatasetcommand东西以及与它功效一致的sqldatasetcommand东西。咱们仍旧领会了它们三个重要功效中的一个,即是经过运用吩咐字符串和一个贯穿号向dataset 东西中介入数据。下面临其余两个重要功效举行计划,开始是革新(updating)。 在保守的ado中,一个存户端的 recordset 东西经过sql 语句来举行革新。在这边sql 模仿盛开式锁定,所以革新得以被归来到数据库。这是一个精巧的体制,但有两个缺陷:一、机动天生的sql语句不易变动,所以假设你写少许高功效的保存进程,将会比径直运用sql 语句赶快的多。二、这是第一个题目的连接。当须要革新的数据源没辙领会ansi-sql的功夫,你就没辙运用存户端的recordset了。象active directory, exchange 2000以及 indexing services那些兼容ado 的数据源,它们不兼容ansi 的规范。所以你即使想经过ado对它们举行革新,你就只能运用效劳器端的光标了。 在ado.net 中那些题目被处置了。第一种本领,dataset 与数据源实足割断,adodatasetcommand动作一个独力的实业与数据源举行交互。革新实足由adodatasetcommand举行,而dataset则被实足分隔。 第二中本领,adodatasetcommand将革新的sql语句动作一种公然的属性,如许你不妨轻快的替代sql 语句,大概是保存进程。更为精巧的是,即使你想运用保存进程,visual studio.net 将为你天生,鄙人一局部咱们不妨看到简直的运用。 结果是对于数据表映照功效。数据的运用者不须要获得如许一个数据表:列以'au_fname' 和 'au_lname'定名。不只是不场面的题目,更要害的是如许会把数据库的构造表露出来了,数据映照承诺你在dataset 中替代列的名字,即使须要,不妨为各别的用户供给各别的数据表映照,底下我将引见怎样运用visual studio.net ,在图形化的界面下创造数据革新的代码。 大略的可视化安排 visual studio.net 为 windows forms, web forms, web services, components and xml schemas的安排供给了图形化的安排东西。安排者只须要从东西条上的控件拖动到处事地区 就不妨了。在这边,处事地区将与最后用户看到的界面有很大辨别。 当你将一个非可视的东西如adodatasetcommand拖动进入时,它将被表露在安排视图中,但用户将没辙看到这个东西。其余的数据控件也是如许。 表7表露了一个vb.net的名目,这个名目有一个窗体,上头有一个datagrid控件、一个commandbutton以及adodatasetcommand控件,在这边你不妨象在visual studio 6中一律来处置adodatasetcommand:在可视化的界面中你不妨运用引导来创造adodatasetcommand的贯穿字符串,吩咐字符串;在与数据库的接口上,你不妨采用机动天生sql语句,采用已有的保存进程,或是创造一个新的保存进程。 表8表露了引导的最闭幕果,你不妨给你创造的保存进程定名,大概不过预览一下,而后将之存为文献再不此后窜改。 即使你不想运用保存进程,你也不妨径直运用sql语句,你还不妨在属性面板上窜改那些语句。你还不妨做的处事囊括给对列举行大略化的定名,再不你此后不妨简单的运用。简直的操纵不妨参看表9的对话框。 在实行了之上的处事后,运用步调的编写变的对立很轻快了,底下是datagrid的绑定的代码:me.adodatasetcommand1.filldataset(dsauthors)me.datagrid1.datasource = dsauthors adodatasetcommand1变成窗体me的一个属性,它将dsauthors表装入一个dataset 东西,接着树立datagrid的datasource属性为dsauthors。结果是编写commandbutton的click 事变:me.adodatasetcommand1.update(dsauthors) update 事变将按照对dsauthors的窜改对数据源举行革新(简直的update 本领在保存进程中仍旧被设定)。这与ado 阻碍开贯穿的recordsets东西的批量革新很一致,但功效更高。不妨在表第10中学看到最后实行的运用步调,它的列名仍旧被替代为新的列名。表10: 运转截止 典型化的dataset 对于很多开拓者来说,她们仍旧风气了运用ado 的 recordset 东西的,象运用字段(fields)而不是运用属性(properties),如许做有它的上风,但也有很多缺点。开始,与属性各别,字段并不是强典型的,它不为intellisense本领(机动指示语法、参数和东西属性)所扶助。其余,由于不是强典型,以是你没辙为它增添自设置的本领或是属性,这表示着当你须要把一个recordset 东西的功效实足封装起来的功夫,你会遇到很多控制。 与之对立,由于.net 平台扶助接受,以是你不妨创造dataset 东西的子类,并向个中增添新的功效。这即是具备典型的 dataset,它基础上没有什么运用范畴的控制,一切dataset 在.net 中内建的个性都将被扶助,囊括绑定,和xml dom 的里面操纵。为了创造如许一个具备典型的 dataset 东西,你所须要的不过一个xsd 方法的 xml schema。 当你鉴于一个datasetcommand 上创造具备典型的 dataset 的功夫,你以至不妨让visual studio.net 来创造如许一个 xml schema,一切的处事不过鼠标在'generate dataset'菜单上的轻轻一点(见表7)。在这边运用的xml schema与表第22中学的是一律的(只有你对数据表的构造做了变换) 在反面的例子中我将运用我创造的具备典型的authorsdataset 东西来包办dataset 东西。authorsdataset中的一切表和列都将是它的属性,所以所写出的代码将更容易察看,而强典型将更不易堕落,同声还不妨运用intellisense本领。表11表露了典型化的dataset 的编制程序界面,提防intellisense菜单也被表露出来了。 表1第11中学咱们不妨看到在authorsdataset被创造之后,同声还创造了authorsselecttable(接受于datatable),authorsselectrow(接受于datarow),以及一切的列的类(接受于datacolumn),由此,咱们不妨看到接受对.net 的要害意旨。 findbyauthor_id本领机动被增添到authorsselecttable类中,列属性被机动增添到authorsselectrow类中,一切的类的代码都利害湮没的并且容易扩充。即使你仍旧风气了运用割断贯穿的(disconnected)或是假造的(fabricated)recordset 东西,那么转向ado.net 运用具备典型的 dataset 东西是一个很好的采用。 ado 到 ado.net 是一个革新性的兴盛,在一切的.net framework范围中,很多基础的组件不妨被重写,由于不必遭到二进制兼容性的强迫性牵制以是不妨对一切典型的组件的接口举行重写和革新,而ado.net 不过个中一例。 在过程了几个礼拜的运用后,我觉得 ado.net 与ado 比拟是一个更完备的模子,我特殊合意它对ado所做的矫正。固然那种水平上讲,对于开拓者来说,须要进修一种新的东西模子,但我仍倡导开拓者向.net变化。ado.net 接受了ado的崇高个性,而且更容易运用。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.