if (args.RecordsAffected == 0)
{
args.Row.RowError = "Optimistic Concurrency Violation Encountered";
args.Status = UpdateStatus.SkipCurrentRow;
}
}
III.协作设计
在你写期间,你应当锁定DataSet。
IV.仅当需要的时候才使用COM对象访问ADO
ADO.NET设计为大量应用程序最好的解决方案。然而一些应用程序需要只有ADO对象才能提供的功能,比如ADOMD。这种情况下可以使用COM对象访问ADO,注意的是使用COM对象访问ADO数据会影响应用程序的执行效率。所以在设计应用程序时,首先应该考虑在使用COM对象访问ADO数据之前,看看ADO.NET是否就满足你的设计要求。
V.ADO.NET和ADO的比较
I.ADO.NET在ADO设计模型的基础上演变和发展而来,它并不取代COM程序员的ADO,更多地,它是为.NET程序员访问相关数据源、XML和应用程序数据设计。ADO.NET支持多样化的发展要求,包括创建数据库客户端和供应用程序、工具、语言、WEB浏览器等使用的中间层业务对象。ADO.NET与ADO有许多相似的地方。
II.ADO为COM程序员提供了高效的、强大的与数据库打交道的各种接口。ADO能得到广泛的运用是因为它支持任何的自动化控制语言(比如VC、VB和脚本语言等)的调用。ADO基础上升级而来的ADO.NET提供更好的交互平台和可升级的数据访问。在ADO.NET中创建一个新的数据访问API集能提供较之于ADO接口几个优越的地方,如下所述:
①改进了与XML的结合
随着XML在应用程序中扮演着越来越重要的角色,与XML结合的ADO.NET就应运而生。为了持续和装载数据以及数据的XML格式,ADO.NET依赖XML在多层之间或客户机之间远程传递数据。ADO.NET中使用的特殊XML表述形式提供在任何网络中十分便利地传输数据的方法,包括数据安全边界。同时,ADO.NET使用XML工具执行确认、分级查询和数据和数据之间的转换。
②综合.NET框架
ADO结构如Recordset并不使用常见的设计结构,相反它模拟成一种数据导向。举例,ADO中的用来导航和得到数据的游标,它的功能性就与其它的比如数组和集合数据结构不同。然而,在ADO.NET中,因为存储的数据能通过公共的.NET框架结构暴露,包括数组和集合,所以你可以使用一些公共的方法与你的相关数据打交道。
③改良对离散业务模型的支持
ADO使用Recordset提供有限的对离散访问的支持。ADO.NET介绍一个新的对象DataSet,它作为相关数据的一个公共的、存储的表现形式,在任何时候都被设计为离散的,它与外部数据并不保持持久的连接,它是包装、存储、交换、延续和装载数据的好方法。也就是说任何对数据的操作都是在本地进行,而不直接与真实的数据库打交道。
④数据访问行为的控制是清楚的
ADO中包括在应用程序中并不总是要求和指定的隐含行为会限制应用程序的性能。而在ADO.NET中提供良好的定义和预先的行为、执行和语义要素组件使得你可以在一个高优化的方式下定位到一个普通的情节上。
⑤改善设计阶段的支持
ADO源自执行阶段隐含的数据信息,而这种信息是基于花费昂贵代价才获得的元数据。在ADO.NET中的元数据只是在设计阶段起一个杠杆作用,从而提供执行阶段更好的性能和更好的稳定性。
III.ADO设计
为了更好地理解ADO.NET模型和设计思想,回顾一下ADO的概念是有用的。ADO使用一个单一的对象Recordset与所有数据类型打交道。Recordset被用来处理从数据库返回的只进流数据、翻卷服务器上数据或者翻卷一批存储结果集。数据上的改变会立即运用到数据库上或运用到使用乐观查询和更新操作的一批数据上。当你创建一个Recordset时你就明确了你所作的任务,Recordset结果行为的改变主要取决于你要求的Recordset参数。因为ADO使用一个单一的能在很多场合使用的Recordset对象,这使得你的应用程序中的对象模型很简单。然而,也很难写一个公用的、可预言的和最优化的代码,那是因为行为、执行和一个单一对象描述的语义要得到改变很大程度上取决于对象是如何创建和对象访问的是什么数据。
IV.ADO.NET设计
ADO.NET是考虑到开发者在访问和使用数据时共同面对的任务和问题而设计。宁可使用一个单一对象执行大量任务,还不如如ADO.NET中指定每个对象的功能性因素去完成对应的每个任务。ADO中的Recordset功能性被分解成ADO.NET中以下的几个清楚对象:DataReader,提供快速的、只进的和只读的访问去查询结果;DataSet,存储数据;DataAdapter,在DataSet和数据源之间架起一道桥梁;ExecuteNonQuery,不返回行;ExecuteScalar,返回一个单一值而不是一个行集。下面是一些详细说明:
①只进、只读数据流
应用程序,特别是中间层应用程序,经常要程序化地处理一系列结果,要求在他们读的时候没有用户交互和没有更新或回滚结果。在ADO中,执行这类数据时使用Recordset的只进游标和只读锁。在ADO.NET中,DataReader优化了这种数据的执行性能,它通过提供一个非缓冲、只进和只读的数据流从数据库得到数据。
②返回单一值
在ADO中要得到一个单一值,你需要通过创建一个Recordset—〉读取结果—〉得到单一值—〉关闭Recordset这样一个过程。在ADO.NET中你就可以使用Command对象的ExecuteScalar方法不需要额外的操作来获得单一值。
③离散数据访问
ADO使用客户端游标定位离散数据的访问,而在ADO.NET中DataSet可以很清楚地实现离散数据的访问。DataSet能从一个多样的不同的数据源提供一个公有的、完全离散的数据表现形式,是因为DataSet是完全独立于数据源的。它不管你数据是从数据库来的,还是从XML文件来的,抑或是从应用程序中得到的。一个简单的DataSet可以装载从多个不同数据库或非数据库源的数据。然后使用DataRelation在多个表之间建立一个连接,尽管Recordset的MsDataShape提供者可以实现分级结构查询,但是DataSet提供更高的稳定性处理离散数据。同时DataSet提供以XML文件格式在远程客户端和服务器之间传输数据。
④从数据库得到数据和更新数据
ADO.NET提供更好的执行阶段性能和可见性。举例,当使用ADO的Recordset对象进行批更新时,你必须为每个需要改变结果的行使用UPDATE、INSERT或DELETE声明。ADO产生这些声明,在执行阶段,是需要付出昂贵代价的获得元数据的。而在ADO.NET中,指定UPDATE、INSERT或DELETE命令就如同自定义业务逻辑(比如一个存储过程)一样,你可以使用DataAdapter实现这一切。DataAdapter在DataSet和数据源之间架起一道桥梁。让你在执行阶段就不是如ADO的Recordset一样需要在数据源中收集元数据信息。从而改善应用程序的执行性能。
V.数据类型
在ADO中,所有的结果返回一个Variant数据类型,在ADO.NET中,你可以得到列本身的数据类型。数据类型可以在System.Data.SqlTypes名称空间定义。
W.有关ADO和ADO.NET的详细介绍,请参考微软上的资料:ADO.NET for the ADO Programmer
总结:
通过本文,希望与大家共同交流和学习,有不当之处请大家指正,谢谢!
ADO.NET最佳实践(上)
http://www.csdn. 上一页 [1] [2] [3] [4] [5] 下一页 [C语言系列]NET 中C#的switch语句的语法 [系统软件]托拽Explore中的文件到VB.net的窗口 [系统软件]Boost库在XP+Visual C++.net中的安装 [常用软件]新配色面板:Paint.Net3.0RC1官方下载 [常用软件]用内建的“Net Meeting”聊天 [VB.NET程序]Henry的VB.NET之旅(三)—共享成员 [VB.NET程序]Henry的VB.NET之旅(二)—构造与析构 [VB.NET程序]Henry的VB.NET之旅(一)—失踪的窗体 [VB.NET程序]在托盘上显示Balloon Tooltip(VB.NET) [VB.NET程序]Henry手记-VB.NET中动态加载Treeview节点(二)
|