选择DataSet还是DataReader
在开发数据应用程序的时候,我们就避免不了与数据打交道。
而在.net的开发平台上,我们理所应当的会想到Ado.net
一、Ado.net概述
ADO.NET 是一组向 .NET Framework 程序员公开数据访问服务的类。ADO.NET 为创建分布式数据共享应用程序提供了一组丰富的组件。它提供了对关系数据、XML 和应用程序数据的访问。
上面是MSDN的原话,总结起来可以这样说,ado.net为用户提供了一组类,而通过些类,可以实现上面所说的连接到数据库、执行命令和检索结果等功能。
DataSet
ADO.NET DataSet 是专门为独立于任何数据源的数据访问而设计的。 因此,它可以用于多种不同的数据源,用于 XML 数据,或用于管理应用程序本地的数据。DataSet 包含一个或多个DataTable 对象的集合,这些对象由数据行和数据列以及有关DataTable 对象中数据的主键、外键、约束和关系信息组成。
下图阐释了 .NET Framework 数据提供程序和 DataSet 之间的关系。
DataReader
使用 DataReader 检索数据包括创建 Command 对象的实例,然后通过调用 Command.ExecuteReader 创建一个DataReader,以便从数据源检索行。
二、选择DataSet还是DataReader
在决定应用程序应使用 DataReader还是应使用 DataSet时,应考虑应用程序所需的功能类型。 使用DataSet 可执行以下操作:
-
在应用程序中将数据缓存在本地,以便可以对数据进行处理。如果只需要读取查询结果,则 DataReader 是更好的选择。
-
在层间或从 XML Web services 对数据进行远程处理。
-
与数据进行动态交互,例如绑定到 Windows 窗体控件或组合并关联来自多个源的数据。
-
对数据执行大量的处理,而不需要与数据源保持打开的连接,从而将该连接释放给其他客户端使用。
如果不需要 DataSet 所提供的功能,则可以通过使用 DataReader 以只进、只读方式返回数据,从而提高应用程序的性能。 虽然DataAdapter 使用 DataReader 来填充DataSet 的内容但使用 DataReader 可以提升性能,因为这样可以节省DataSet 所使用的内存,并将省去创建 DataSet 并填充其内容所需的处理。
总结:所以,在只是需要查询的结果的时候,考虑到效率,如果查询的数据量巨大,最好还是用dataReade——时间换空间。
如果查询的数据量不是太大的话,最好还是选择用dataSet(同时,dataset也很多的优点)——空间换时间。
三、使用DataReader时注意
每次使用完 DataReader 对象后都应调用 Close 方法。
如果 Command 包含输出参数或返回值,那么在 DataReader 关闭之前,将无法访问这些输出参数或返回值。
请注意,当 DataReader 打开时,该 DataReader 将以独占方式使用 Connection。 在原始 DataReader 关闭之前,将无法对 Connection 执行任何命令(包括创建另一个DataReader)。