ADO.NET最佳实践(中)[5]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 spidertan 的 blog

dataset ds = new dataset();

da.fill(ds, "customers");

    q.使用datareader

        下面是使用datareader的一些技巧和一些问题的回答:

        i.在使用相关command访问任何输出参数之前必须关闭datareader;

        ii.在读取数据结束后应当关闭datareader。如果你的connection仅仅是用来返回datareader,那么在关闭datareader之后你也应该立即关闭它。另外一个关闭connection的方法是传递commandbehavior.closeconnection给executereader方法。此方法在你从一个方法中返回datareader并且对这个datareader没有关闭控制权或者关联的连接时使用时非常有用的。

        iii.datareader是为已连接的数据存取设计;

        iv.使用getstring、getint32等返回特殊数据类型数据;

        v.一个连接只允许使用一个datareader。在ado中,如果你只创建一个连接并使用两个recordsets,一个只读游标和一个只进游标,但实际上,ado已经为你创建了一个隐式的连接,并在不用的时候隐式地关闭它。ado.net中是不行的,你必须为每个datareader创建一个connection,这也是为了让你在使用connection时给予更多的控制信息。

        vi.默认下,datareader每次读取时把行中所有的数据装载到内存中。并允许你随机存取当前行中数据。如果随即存取没有必要(没有必要把所有数据都装载到内存),并想提高执行效率,给executereader方法传递commandbehavior.sequentialaccess,这样就会改变datareader的默认动作为仅仅装载请求的数据到内存。注意的是这种方法要求你顺序地存取行中列数据,一旦你略过某一列,以后你将再不会读取到该列的数据。

        vii.如果当你在完成从一个datareader读取数据后,仍然还有大量未读不需要的数据,这就要在调用datareader的close命令之前调用cancel命令。调用datareader的close命令会导致把不需要的数据装载进来并在关闭游标之前清空数据。而调用cancel命令就会丢弃这部分数据,从而datareader在关闭之前就不会读取它们。如果你正在从你的命令返回输出参数,调用cancel命令同样会丢弃它们。如果你需要读取任何输出参数,你就不要使用cancel,而直接使用close。

本文关键:数据库设计
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top