下面是使用DataReader提高性能的一些技巧:
l 在访问任何与命令(Command)相关的输出参数前DataReader必须 关闭。
l 在读完数据后就 关闭DataReader。如果你正在使用的连接只返回该DataReader,在 关闭DataReader后立即 关闭连接。
l 另一种明确地 关闭连接的方法是给ExecuteReader方法传递CommandBehavior.CloseConnection以确保当DataReader 关闭时相关的连接 关闭了。如果你从某个方法返回DataReader,并且没有办法控制DataReader或者相关的连接 关闭的情况下特别有用。
l DataReader不能在层之间远程访问。DataReader是设计用于连接数据访问的。
l 使用类型化的存取程序(例如GetString、GetInt32等等)来访问列数据。这节省了将GetValue返回的对象作为特定类型的必要的处理。
l 在某一时刻只有一个DataReader能够打开。。在ADO中,如果你打开一个连接并请求两个使用只向前的只读游标的记录集,ADO隐性地为游标的生命周期的数据存储打开第二个不在连接池中的连接,接着隐性地 关闭它。在ADO.NET中,如果你想在同一个数据存储上同时打开两个DataReader,你必须明确地建立两个连接,每个DataReader一个。通过这种方法ADO.NET给了你对连接池使用的更多控制。
l 默认情况下,DataReader在每个Read方法中把整个行载入内存中。这允许你随机访问当前行的任意列。如果随机访问是不必要的,为了提高性能,把CommandBehavior.SequentialAccess传递给ExecuteReader调用。这改变了DataReader的默认行为,只在需要时才把数据载入内存。注意CommandBehavior.SequentialAccess要求你按次序访问返回的列。也就是,一旦你读过了返回的某个列,就不能再次读取它的值了。
l 如果你结束了从DataReader中读取数据,但是仍然有大量的未读取的结果等待,那么调用Command的Cancel比调用DataReader 的Close好。调用DataReader 的Close引起它检索等待的结果并且先清空流后 关闭游标。调用Command的 Cancel删除服务器上的结果,因此当DataReader 关闭时,它不需要再读取结果。如果你从Command返回输出参数,则调用Cancel删除它们。如果你要读取任何输出参数,不要调用Command 的Cancel;最后调用DataReader的 Close。
l 在访问任何与命令(Command)相关的输出参数前DataReader必须 关闭。
l 在读完数据后就 关闭DataReader。如果你正在使用的连接只返回该DataReader,在 关闭DataReader后立即 关闭连接。
l 另一种明确地 关闭连接的方法是给ExecuteReader方法传递CommandBehavior.CloseConnection以确保当DataReader 关闭时相关的连接 关闭了。如果你从某个方法返回DataReader,并且没有办法控制DataReader或者相关的连接 关闭的情况下特别有用。
l DataReader不能在层之间远程访问。DataReader是设计用于连接数据访问的。
l 使用类型化的存取程序(例如GetString、GetInt32等等)来访问列数据。这节省了将GetValue返回的对象作为特定类型的必要的处理。
l 在某一时刻只有一个DataReader能够打开。。在ADO中,如果你打开一个连接并请求两个使用只向前的只读游标的记录集,ADO隐性地为游标的生命周期的数据存储打开第二个不在连接池中的连接,接着隐性地 关闭它。在ADO.NET中,如果你想在同一个数据存储上同时打开两个DataReader,你必须明确地建立两个连接,每个DataReader一个。通过这种方法ADO.NET给了你对连接池使用的更多控制。
l 默认情况下,DataReader在每个Read方法中把整个行载入内存中。这允许你随机访问当前行的任意列。如果随机访问是不必要的,为了提高性能,把CommandBehavior.SequentialAccess传递给ExecuteReader调用。这改变了DataReader的默认行为,只在需要时才把数据载入内存。注意CommandBehavior.SequentialAccess要求你按次序访问返回的列。也就是,一旦你读过了返回的某个列,就不能再次读取它的值了。
l 如果你结束了从DataReader中读取数据,但是仍然有大量的未读取的结果等待,那么调用Command的Cancel比调用DataReader 的Close好。调用DataReader 的Close引起它检索等待的结果并且先清空流后 关闭游标。调用Command的 Cancel删除服务器上的结果,因此当DataReader 关闭时,它不需要再读取结果。如果你从Command返回输出参数,则调用Cancel删除它们。如果你要读取任何输出参数,不要调用Command 的Cancel;最后调用DataReader的 Close。