DataSet或Reader还是什么?

时间:2010-07-22 14:03:30

标签: c# asp.net

使用Class从数据库中获取一行最适合使用的数据时:

  • 一个数据集?
  • 阅读器,并将数据存储在结构中?
  • 还有什么?

感谢你的时间,Nathan

4 个答案:

答案 0 :(得分:3)

DataReader始终是您的最佳选择 - 前提是它与您的使用兼容。 DataReader非常快速,高效且轻量级 - 但它们要求您在其生命周期中维护活动/开放数据库连接,这意味着它们无法跨AppDomain(或跨Web服务等)进行编组。

DataSet实际上是由DataReaders填充的 - 它们是急切加载的(所有数据都是在访问任何数据之前填充的),因此性能较差,但它们具有可序列化的附加好处(它们基本上只是一个DTO)这意味着它们很容易通过AppDomains或Web服务进行传输。

差异有时归结为“DataReader是ADO.NET ONLINE的理想选择(暗示保持数据库连接打开是好的),而DataSet是ADO.NET OFFLINE的理想选择(消费者无法连接)直接到数据库)。

答案 1 :(得分:0)

DataAdapter(填充DataSet)使用DataReader来执行此操作。

因此,DataReader总是比DataAdapter更轻量级,更易于使用。 DataSets和DataTables在内存使用方面总是有巨大的开销。如果要获取单行,则没有区别,但对于更大的结果集会产生巨大的差异。

如果要获取固定数量的项目,则在MS SQL Server中,存储过程(或参数化命令)中的输出变量通常表现最佳。

答案 2 :(得分:0)

如果使用阅读器,则必须与数据库建立打开连接,通常使用DataReader获取组合或数据网格,但如果要将数据存储在内存中并关闭数据库连接,则必须使用数据表

注意:请原谅我的英语水平

答案 3 :(得分:0)

如果您只想要对数据进行只读访问,那么请使用原始DataReader;这是禁食且最轻量级的数据访问方法。

但是,如果您打算更改数据并保存回数据库,那么我建议使用DataAdapter和DataSet(甚至是类型化的DataSet),因为DataSet类负责跟踪对数据的更改,添加和删除。设置使得保存更容易。此外,如果数据集中有多个表,则可以在数据集中对它们之间的引用约束进行建模。