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文件格式在远程客户端和服务器之间传输数据。
④从数据库得到数据和更新数据