简要而言:
DataReader是一种只能向前迭代访问结果集的类型。在你不需要随机访问记录时,通常是处理记录最有效的方法(也就是说不能向后跳)。由于它每次只加载一条记录,因此从内存压力方面来说,它可扩展到任意数量的记录。获取DataReader的一种典型方式是使用DbCommand的ExecuteReader方法。
DataSet代表一组DataTable对象。往往它只包含一个表格,但如果你使用多个SELECT语句进行查询,则DataSet将包含每个表。由于这是一个内存表示,所以你必须小心,控制好你将多少数据拉入DataSet中。可以使用DataAdapter的Fill方法向DataSet“填充”数据。
DataAdapter是一种将数据从数据库引擎传输到DataSet的“管道”。这就是为什么每个DB提供程序类型都会有一个DataAdapter实现。一个DataSet,多个提供程序。
DataView就像是一个DataTable的虚拟子集。
DataReader
DataReader用于从数据库读取数据,它是一种只读、连接导向的架构,在从数据库获取数据时进行迭代。 DataReader用于迭代来自服务器的结果集,并一次读取一条记录,因此内存消耗较少,并且与数据集相比,它会非常快地获取数据。通常我们会使用ExecuteReader对象将数据绑定到datareader上。
DataSet
DataSet是一种断开式的Orient架构,这意味着在使用数据集时不需要活动连接,并且它是一个包含数据表和表之间关系的集合。它用于保存多个带有数据的表。您可以从表中选择数据,基于表创建视图并通过关系请求子行。 DataSet还提供了丰富的功能,如将数据保存为XML并加载XML数据。
DataAdapter
DataAdapter将充当数据集和数据库之间的桥梁。该Dataadapter对象用于从数据库中读取数据并将该数据绑定到数据集上。 DataAdapter是一种断开式的架构。
我建议您阅读MSDN文档或购买一本书。以下是简短的答案:
DataReader类似于只向前的记录集。它一次只获取一行数据,因此与DataSet(一次获取所有行)相比,网络成本非常低。 DataReader是只读的,因此我们无法对其进行任何事务处理。当我们需要向用户显示不需要事务的数据时,DataReader将是最佳选择。由于DataReader是只向前的,因此我们无法随机获取数据。 .NET数据提供程序优化了datareader以处理大量数据。
DataSet是数据库对象集合的内存表示,包括关系数据库模式的表格。 DataSet始终是一个庞大的对象,需要大量的内存空间,与DataReader相比。我们可以说DataSet是一个小型数据库,因为它将模式和数据存储在应用程序内存区域中。 DataSet一次从数据源获取所有数据到其内存区域。因此,我们可以遍历该对象以获取所需的数据,就像查询数据库一样。