DataSet 与 SqlDataReader





5.00/5 (2投票s)
对如何使用DataSet和DataReader感到困惑吗?我正在尝试提供一些关于DataReader的基本理解和区别。
如何使用 DataSet 以及如何使用 DataReader?
我试图对 ADO.NET 中的 DataReader 和 DataSet 之间的区别给出一些基本的理解。
DataReader
- ADO.NET 的 DataReader 用于从数据库检索只读(无法将数据更新回数据源)和只进(无法向后/随机读取)数据。
- 使用 DataReader 可以提高应用程序性能并减少系统开销。这是由于一次只将一行存储在内存中。
- 您可以通过在创建 Command 对象实例后调用 Command.ExecuteReader 来创建 DataReader。
- 这是一种连接架构:只要与数据库的连接存在,数据就可用。
- 您需要在代码中手动打开和关闭连接。
以下代码语句用于从数据源检索行。
// 必须打开连接
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
- DataSet 是数据的内存表示。
- 它可以与多个数据源一起使用。也就是说,一个 DataSet 可以保存来自不同数据源的数据,这些数据源包含来自不同数据库/表的数据。
- DataSet 表示一组完整的数据,包括相关表、约束以及表之间的关系。
- DataSet 还可以将内容作为 XML 以及其模式作为 XML 模式定义语言 (XSD) 模式进行持久化和重新加载。
- DataAdapter 充当 DataSet 和数据源之间的桥梁,用于检索和保存数据。
- DataAdapter 有助于映射 DataSet 中的数据以匹配数据源中的数据。
- 此外,在更新数据集时,它允许更改数据源中的数据以匹配 DataSet 中的数据。
- 无需在代码中手动打开和关闭连接。
- 因此,第 (8) 点表明它是一种断开连接的架构。将数据填充到 DataSet 中,就完成了。不需要连接存在
以下代码语句用于从数据源检索行。
区别 执行查询时,第一行通过流返回到 DataReader 并存储在客户端。DataReader 的 Read() 方法转到数据库并读取下一行,将其存储在客户端。
然后,流保持与数据库的连接,准备检索下一条记录。因此,对于 Read() 方法检索下一行,您的数据库连接必须存在。 因此,使用 DataReader,您一次只能处理一行数据。
它不像 DataSet 那样在查询执行时在客户端存储所有记录。
那么何时使用 DataReader 呢? 当填充列表或检索 10,000 条记录时。当必须将大量数据检索到业务流程时,加载 DataSet、将数据从数据库传递到它,然后将其存储在内存中可能需要一段时间。但是,在可能有数百个用户连接的 Web 应用程序中,可伸缩性将成为一个问题。如果打算检索此数据,然后遍历它以进行业务规则处理,则 DataReader 可以加速该过程,因为它一次检索一行,并且不需要 DataSet 要求的内存资源。