65.9K
CodeProject 正在变化。 阅读更多。
Home

DataSet 与 SqlDataReader

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2013 年 10 月 11 日

CPOL

3分钟阅读

viewsIcon

38844

对如何使用DataSet和DataReader感到困惑吗?我正在尝试提供一些关于DataReader的基本理解和区别。

如何使用 DataSet 以及如何使用 DataReader?

我试图对 ADO.NET 中的 DataReader 和 DataSet 之间的区别给出一些基本的理解。

DataReader
  1. ADO.NET 的 DataReader 用于从数据库检索只读(无法将数据更新回数据源)和只进(无法向后/随机读取)数据。
  2. 使用 DataReader 可以提高应用程序性能并减少系统开销。这是由于一次只将一行存储在内存中。 
  3. 您可以通过在创建 Command 对象实例后调用 Command.ExecuteReader 来创建 DataReader。 
  4. 这是一种连接架构:只要与数据库的连接存在,数据就可用。
  5. 您需要在代码中手动打开和关闭连接。
以下代码语句用于从数据源检索行。
 
 
// 必须打开连接
conn.open();
string SQLquery = "SELECT CustomerID, CompanyName FROM dbo.Customers";
SqlCommand cmd = new SqlCommand(SQLquery, conn);
// 调用 ExecuteReader 返回 DataReader
SqlDataReader myReader = cmd.ExecuteReader();
// DataReader 对象的 Read 方法用于从已执行查询的结果中获取一行。 
while(myReader.Read())
{
    Console.WriteLine("\t{0}\t{1}", myReader.GetInt32(0), myReader.GetString(1));
}
// 完成 DataReader 后,调用 Close 方法关闭 DataReader
myReader.Close();
// 关闭连接
conn.close();




DataSet
  1. DataSet 是数据的内存表示。 
  2. 它可以与多个数据源一起使用。也就是说,一个 DataSet 可以保存来自不同数据源的数据,这些数据源包含来自不同数据库/表的数据。
  3. DataSet 表示一组完整的数据,包括相关表、约束以及表之间的关系。 
  4. DataSet 还可以将内容作为 XML 以及其模式作为 XML 模式定义语言 (XSD) 模式进行持久化和重新加载。
  5. DataAdapter 充当 DataSet 和数据源之间的桥梁,用于检索和保存数据。 
  6. DataAdapter 有助于映射 DataSet 中的数据以匹配数据源中的数据。 
  7. 此外,在更新数据集时,它允许更改数据源中的数据以匹配 DataSet 中的数据。 
  8. 无需在代码中手动打开和关闭连接。
  9. 因此,第 (8) 点表明它是一种断开连接的架构。将数据填充到 DataSet 中,就完成了。不需要连接存在
以下代码语句用于从数据源检索行。
 
 
string SQLquery = "SELECT CustomerID, CompanyName FROM dbo.Customers";
// 创建将保存您的表/数据的 DataSet
DataSet ds = new DataSet("CustomerDataSet");
// 创建 SqlDataAdapter,它充当将数据放入 DataSet 的桥梁,(数据是通过执行您的 SQL 查询获得的表)
SqlDataAdapter myAdapter = new SqlDataAdapter(SQLquery, conn);
// 使用某个名称(例如“CustomersTable”)将数据填充到数据集中
myAdapter.Fill(ds,"CustomersTable");

 
区别
执行查询时,第一行通过流返回到 DataReader 并存储在客户端。DataReader 的 Read() 方法转到数据库并读取下一行,将其存储在客户端。
然后,流保持与数据库的连接,准备检索下一条记录。因此,对于 Read() 方法检索下一行,您的数据库连接必须存在。 因此,使用 DataReader,您一次只能处理一行数据。
它不像 DataSet 那样在查询执行时在客户端存储所有记录。

那么何时使用 DataReader 呢?
当填充列表或检索 10,000 条记录时。当必须将大量数据检索到业务流程时,加载 DataSet、将数据从数据库传递到它,然后将其存储在内存中可能需要一段时间。但是,在可能有数百个用户连接的 Web 应用程序中,可伸缩性将成为一个问题。如果打算检索此数据,然后遍历它以进行业务规则处理,则 DataReader 可以加速该过程,因为它一次检索一行,并且不需要 DataSet 要求的内存资源。



© . All rights reserved.