什么更好:DataSet或DataReader?

时间:2009-07-04 23:49:09

标签: c# asp.net ado.net

我刚看到这个主题:Datatable vs Dataset 但它并没有解决我的疑问..让我解释得更好,我正在与数据库建立联系,需要在GridView中显示结果。 (我在使用VB6时使用了RecordSet,而DataSet与它非常相似,所以使用DataSet要容易得多。) 然后一个人告诉我DataSet不是最好的方法..

那么,我应该'学习'DataReader还是继续使用DataSet? DataTable? 有什么利弊?

6 个答案:

答案 0 :(得分:197)

这基本上是:“哪个更好:水桶还是软管?”

这里有一个DataSet;它允许您随身携带一组断开连接的数据并使用它 - 但是您将承担携带水桶的成本(因此最好将其保持在您熟悉的尺寸)。

数据阅读器是软管:它提供单向/一次访问数据,因为它飞过你;您不必一次携带所有可用的水,但需要连接到水龙头/数据库。

就像你可以用软管填充水桶一样,你可以用数据阅读器填充DataSet

我想说的是,他们做了不同的事情......

我并非经常亲自使用DataSet - 但有些人喜欢它们。但是,我确实使用数据读取器进行BLOB访问等。

答案 1 :(得分:71)

这取决于您的需求。其中一个最重要的区别是DataReader将保留与数据库的开放连接,直到您完成它,而DataSet将是一个内存中对象。如果将控件绑定到DataReader,则它仍处于打开状态。此外,DataReader是一种仅向前读取无法操作的数据的方法。使用DataSet,您可以根据需要来回移动和操作数据。

一些附加功能:DataSet可以序列化并以XML格式表示,因此可以轻松传递到其他层。 DataReader无法序列化。

另一方面,如果您要从数据库中读取大量行,并将其移交给业务规则的某个进程,则DataReader可能更有意义,而不是使用所有行加载DataSet,从而占用内存并可能影响可扩展性。

这是一个有点过时但仍然有用的链接:Contrasting the ADO.NET DataReader and DataSet

答案 2 :(得分:12)

Marc's点之后:您可以使用完全没有数据库的DataSet。

您可以从XML文件或仅从程序中填充它。用一个数据库中的行填充它,然后转向并将其写入另一个数据库。

DataSet是关系模式的完全内存表示。您是否曾在实际的关系数据库中使用它取决于您。

答案 3 :(得分:5)

不同的需求,不同的解决方案。

正如您所说,数据集与VB6 Recordset最相似。也就是说,下拉所需的数据,传递它,然后按照你的意愿去做。哦,当你完成后最终摆脱它。

Datareader更受限制,但只需一次读取数据就可以获得更好的性能。例如,如果您自己填充网格 - 即拉动数据,运行它,为每一行填充网格,然后丢弃数据 - datareader比数据集好得多。另一方面,如果您有任何更新数据的意图,甚至不尝试使用datareader ......

所以,是的,学习它 - 但只在适当的时候使用它。数据集为您提供了更大的灵活性。

答案 4 :(得分:0)

回答第二个问题 - 是的,您应该了解DataReaders。如果有的话,你就明白了如何使用它们。

我认为你在使用DataSet的情况下会更好 - 因为你正在进行数据绑定和所有(我正在考虑CPU周期与人类的努力)。

哪一个会提供更好的表现。这在很大程度上取决于你的情况。例如,如果您正在编辑您正在绑定的数据并批量处理更改,那么您最好使用DataSet

答案 5 :(得分:0)

DataReader与数据集

1)-DataReader是在面向连接的体系结构中设计的
   -DataSet是在断开的架构中设计的

2)-DataReader仅提供对数据的前向访问权限
   -DataSet可以滚动浏览数据

3)-DataReader是只读的,我们无法对其下的数据进行更改
   -DataSet是可更新的,我们可以对其下的数据进行更改,然后将这些更改发送回数据源

4)-DataReader不提供诸如搜索和排序数据之类的选项
   -DataSet提供了诸如搜索和排序数据之类的选项