一尘不染

SqlDataAdapter与SqlDataReader

c#

使用SqlDataAdapter和SqlDataReader从数据库获取数据之间有什么区别?

我专门研究它们的优缺点以及它们的速度和内存性能。

谢谢


阅读 254

收藏
2020-05-19

共1个答案

一尘不染

SqlDataReader:

  • 在您完成连接之前将其保持打开状态(不要忘记关闭它!)。
  • 通常只能迭代一次
  • 对于更新回数据库没有太大用处

另一方面,它:

  • 一次仅在内存中记录一个记录,而不是整个结果集(可以是 HUGE
  • 在那一次迭代中速度最快
  • 使您可以更快地开始处理结果(一旦第一条记录可用)。对于某些查询类型,这也可能是很大的事情。

SqlDataAdapter / DataSet

  • 让您在连接完成后立即关闭连接,甚至可以自动为您关闭连接
  • 所有结果都在内存中可用
  • 您可以根据需要进行多次遍历,甚至可以按索引查找特定记录
  • 有一些内置的功能可以更新回数据库

以:

  • 很多 更高的内存使用
  • 您等到所有数据加载完毕后再使用任何数据

因此,实际上这取决于您的工作,但是在需要仅由数据集支持的内容之前,我倾向于使用DataReader。SqlDataReader非常适合绑定到只读网格的常见数据访问情况。

有关更多信息,请参阅正式的Microsoft文档

2020-05-19