本帖最后由 张立 于 2012-1-12 09:35 编辑
DataReader是你取一条的时候才从数据库读一条,一次只在内存在存储一行,数据库记录了你读的指针。而DataSet是数据库一下子把数据读出返回到客户端给你。DataTable把数据存到一块内存区域,当把数据库中的数据读取到DataTable中时,我们在界面上做操作时是对内存表的操作并没有改变数据库表的内容。SqlDataReader为长连接,当连接关闭时将无法再进行读取数据。
MS的建议:
选择 SqlDataReader 还是 DataSet/DataTable,从根本上说是一个注重性能还是注重功能的问题。SqlDataReader 可提供最佳性能;DataSet 可提供额外的功能和灵活性。
在下列情况下,请使用由 SqlDataAdapter 对象填充的 DataSet:
• 您需要不连续的内存驻留型数据缓存,以便可以将其传递给应用程序内的其他组件或层。
• 您需要数据在内存中的关系视图,以便进行 XML 或非 XML 操作。
• 您要处理从多个数据源(如多个数据库、表或文件)中检索到的数据。
• 您希望更新检索到的全部或部分行,并且使用 SqlDataAdapter 的批量更新功能。
• 您希望对其执行数据绑定的控件需要支持 IList 的数据源。
在下列情况下,请使用通过调用 SqlCommand 对象的 ExecuteReader 方法得到的 SqlDataReader:
• 您要处理大量的数据 — 多得难以在单个缓存中进行维护。
• 您希望减少应用程序的内存使用量。
• 您希望避免与 DataSet 相关联的对象创建开销。
• 您希望用对实现了 IEnumerable 的数据源提供支持的控件执行数据绑定。
• 您希望简化和优化数据访问。
• 您要读取的行包含二进制大对象 (BLOB) 列。您可以使用 SqlDataReader 在可管理的块区中将 BLOB 数据从数据库中提取出来,而不是一次将其全部提取出来。有关处理 BLOB 数据的详细信息,请参阅本文档中的处理 BLOB 一节。
|