|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Windows本身的所有问题都会一成不变的也累加到了它的身上。安全性、稳定性、跨平台性都会因为与NT的捆绑而显现出来;ADO+增添了哪些内容?
用最笼统的话来讲,ADO+是具有更年夜的可伸缩性和互操纵性的ADO。就工具模子及编程成绩而言,ADO与ADO+是完整分歧的两个实体。只管如许,ADO+源自ADO并保存了它的鼓动民气的准绳。
以更多互操纵性和可伸缩性充分ADO的关头在于断开这个观点。在同意客户机真个剧本代码完成诸如排序、过滤和文档/视图模子之类的风趣和交互式功效的同时,断开的纪录集作为一种保存体系资本的体例被引进到ADO2.0中。ADO+与ADO比拟具有三个次要长处:互操纵性、加强的可伸缩性和强范例。别的,ADO+便于数据组件间的数据共享和在表中的纪录间举行导航。
ADO+从一入手下手就被计划为对断开的数据集举行操纵。断开的纪录集只能无益于使用程序,由于它们是数据的当地视图,可以较快地处置和传输数据。ADO+将XML用作通用的传输格局。只需吸收组件运转于有XML剖析程序可用的平台上,就能够供应很多功效,同时确保互操纵性。经由过程XML举行传输时,吸收者不再必需是一个COM工具。XML是一种复杂但却功效壮大的基于文本的尺度,它最近已广为业界所承受,因此,今朝有来由等候差未几每一个平台上城市有一个XML剖析程序。如许的话,吸收组件就不会有任何的系统布局限定。任何一对软件组件都能够共享ADO+数据,只需它们批准将不异的XML架构用于传输数据格局。对ADO+合用于现有系统布局的体例举行了申明。
.在DNA计划中利用ADO+
暗示层能够经由过程WinForms或WebForms(这两种编程单位公用于MicrosoftVisualStudio.NET平台)利用或创立数据集。在任一种情形下,运转于营业层的组件都吸收一个XML流并举行恣意处置。这些组件能够从头构建一个ADO+情况,也能够将数据按原始XML处置并使其合适于发送到物理数据存储器中。营业组件能够猎取ADO+数据,将其转换为XML,然后将其发送回客户机。任何能够了解XML的使用程序都能够在任一点上参与这一架构。
可伸缩性是散布式体系在不损失效力的情形下对数量渐渐增加的客户机举行服务的才能。可伸缩性是一个常与数据库有关的术语,这是因为散布式体系很年夜水平上依附于数据库。可伸缩性不管关于数据库服务器仍是关于封装了数据会见操纵的任何软件成品都是一个能够延续存在的成绩。可伸缩性的最年夜仇人就是对关头资本的滥用。在散布式体系中,关头一般意味着无限。数据库毗连就是能够影响可伸缩性的关头资本的一个示例。流动数量的毗连的可用性对体系的增加及其才能构成了一个实践的限定。好的软件懂得这类情形并接纳得当措施限定其影响。ADO+对这一成绩的处置是如何优于ADO的呢?并非说ADO是不成伸缩的,而是说对断开的和内存中的表的内涵利用(这是ADO+的特性)使ADO+成为内涵具有更年夜可伸缩性的办理计划。它具有更年夜可伸缩性的缘故原由在于断开的数据集不在很长的工夫内保存锁或坚持翻开毗连。假如利用ADO,您必需编写代码才干取得这一功效;而利用ADO+则会收费取得这一功效。
将XML用作数据集的传输言语能够比ADO更无效地举行数据共享。起首,绕过诸如纪录集之类的COM工具所必须的COM搜集使组件可使用它们要利用的恣意数据范例的汇合。这还会带来更好的功能,由于不再必要确保纪录切合尺度的COM数据范例的数据范例转换。XML和HTTP的利用还同意数据跳过防火墙。一般情形下,防火墙同意HTTP数据包经由过程,但会制止任何试图经过端标语不是80的端口出去的任何别的内容经由过程。
--------------------------------------------------------------------------------
ADO+的组成要素
如今我要先容次要的ADO+工具。我们以一切内容的劈头入手下手,即DataSet工具。
数据集是ADO纪录集的演变。数据集不外是数据库的断开毗连的内存中的视图。就您能够具有静态创立的数据集和数据表而不必要来自数据库办理体系(DBMS)的任何信息而言,数据集与数据源没有任何严厉意义上的干系。换句话说,数据集利用了一些增加到ADO纪录会合的功效:断开时事情的才能和企图性地创立并以任何品种数据举行置进。数据集能够包括恣意数量的表,每一个表一般(但不老是)对应于一个数据库表或视图。DataTable工具对应的表不外是一些行与列的汇合。每行保存其原始形态及其以后形态。
ADO纪录集一向常常以一种充任某种超等数组的通用数据范例呈现。一样,ADO+数据集是一种供应以下功效的超等纪录集:
一种包容数据的更好和更丰厚的编程接口。
一种不必要与实践数据源的任何内涵绑定而供应更加狭义的数据视图的工具模子。
一种用于输出和输入的基于XML的尺度把持台。
ADO纪录集基础上是一种(多是分层的)纪录汇合,它带有一些特定办法,用于完成一些风趣功效。个中包含包含转动、排序、过滤、书签。纪录集实质上是表在内存中的正本。而数据集看起来更象SQLServer或Access数据库,它是一个包括更多表、特定视图和外键干系的实体。
数据集工具模子反应了这一较年夜的局限,它同意您检察超过多个数据表、干系、扩大属性和行的多个汇合的可用数据―这还可用于申明非耐久数据或只是来自不是数据库的另外一个耐久存储介质的数据。
ADO纪录集同意您将内容保留到XML中,并从一个内部XML文件从头构建该内容。但是,接纳的缺省XML架构是针对导出/导进ADO纪录集而优化的,而不是针对实践数据互换。ADOXML架构包括很多关于列范例和地位和别的元数据的信息。假如您但愿从某一XML文档中从头构建纪录集,则这些信息是相当主要的,但假如您只是但愿传送数据并使吸收者利用它,则这些信息没有甚么用途。有了ADO+数据集,XML架构更加简练,由于被暗示的工具与干系数据库没有间接干系,只管工具能够用来严密地再现数据库。ADO+数据集对数据举行形貌,而ADO纪录集则对由某一表中猎取的一个纪录汇合举行形貌。这就是ADO+数据模子的动听的地方。
ADO+XML架构只是再现表和数据会合界说的干系,构建一个DataSet工具的义务则留给ADO+运转时完成。ADOXML格局因为过于详细而没法真正完成互操纵。它还因为过于烦琐,假如不举行数据紧缩的野生干涉,它就没法举行高效的搜集。ADO+数据个人系布局的鼓动民气的准绳与招致我创立JavaScript的Recordset工具的缘故原由之间存在一种底层的类似的地方。在这两种情况中,您都将数听说明(比方,一个XML字符串)转换为一个公用于平台的操纵工具(即一个JavaScript工具)。在如许做的过程当中,您平安地将您的数据从一层发送到另外一层,而不思索安装的操纵体系或软件。
--------------------------------------------------------------------------------
ADO+命令
只管DataSet工具供应一个内存中数据存储的工具,您还必要另外一个工具对各类表举行创立和初始化。这一工具就是DataSetCommand工具,它代表一个将利用毗连和命令的细节埋没起来的会合式把持台。DataSetCommand工具同意某一DataSet工具与源数据存储器间的数据检索和保留。它卖力从物理存储器中提取数据,然后将其推送到各数据表和干系中。DataSetCommand工具还卖力向实践数据库传输任何更新、拔出或删除操纵。DataSetCommand工具经由过程底层OLEDB供应者可以了解的SQL命令或命令字符串完成这一功效。DataSetCommand工具以两种情势存在:
SQLDataSetCommand工具
ADODataSetCommand工具
它们能够被看成在数据表和数据源中的对应表之间的代办署理。数据源是用于SQLDataSetCommand工具的SQLServer7.0(或更新版本)和用于ADODataSetCommand工具的任何别的OLEDB供应者。
一样平常说来,ADO+可以辨认并处置两品种型的数据源:SQLServer7.0(及更新版本)和能够经由过程OLEDB供应者举行会见的任何数据源。这些又称为被办理的供应者。
作为利用DataSetCommand工具的一种交换(如代码示例1中所示),您能够经由过程利用诸如毗连和命令之类的较为熟习的工具,间接对被办理的供应者举行操纵。
代码示例1
DimoDSasDataSet
DimoCMDasSQLDataSetCommand
oDS=NewDataSet
oCMD=newSQLDataSetCommand("Select*fromemployees",strConn)
oCMD.FillDataSet(oDS,"EmployeesList")
DimoRowasDataRow
ForEachoRowinoDS.Tables(0).Rows
Console.WriteLine(oRow(0).ToString())
Next
经由过程检察这类范例的ADO+代码,您会发明它与新式的ADO编程没有多年夜的不同。它具有新的工具、新的编程接口、经由改善的新功效,但代码形式不异。如代码示例2中所示。
代码示例2
DimoCNAsSQLConnection
DimoCMDAsSQLCommand
DimoDRAsADODataReader
oCN=NewSQLConnection(strNWind)
oCMD=NewSQLCommand("MyStoredProcDavolio",oCN)
oCMD.CommandType=CommandType.StoredProcedure
Try
oCN.Open()
oCMD.Execute(oDR)
WhileoDR.Read
Console.WriteLine(oDR("LastName").ToString))
EndWhile
CatcheAsException
Console.WriteLine(e.ToString)
Finally
oDR.Close()
oCN.Close()
EndTry
请注重,上述代码具有MicrosoftVisualBasic |
|