ADO.NET数据读取:Command与DataReader详解

需积分: 3 3 下载量 37 浏览量 更新于2024-09-30 收藏 35KB DOC 举报
"这篇教程详细介绍了ADO.NET中读取数据的两种主要方法,适用于编程初学者。" 在ADO.NET中,我们通常使用两种方法来读取数据库中的数据:`SqlDataReader` 和 `DataSet`。这两种方法各有特点,适用于不同的场景。 1. 使用`Command`和`Datareader`对象读取数据 `SqlDataReader` 是一种只进式的数据流,它能高效地读取大量数据,因为它只保持对当前行的访问,不占用大量内存来存储所有数据。以下是如何使用`SqlDataReader`的示例: ```csharp using System; using System.Data; using System.Data.SqlClient; public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { // 创建数据库连接 SqlConnection conn = new SqlConnection("server=(local);Initial Catalog=pubs;Integrated Security=True"); // 创建SQL查询 string strsql = "SELECT pub_name FROM publishers"; // 创建SqlCommand对象 SqlCommand comm = new SqlCommand(strsql, conn); try { // 打开数据库连接 conn.Open(); // 创建SqlDataReader对象 SqlDataReader sdt = comm.ExecuteReader(); // 使用SqlDataReader遍历数据 while (sdt.Read()) { // 将每条记录的pub_name字段添加到ListBox1中 ListBox1.Items.Add(sdt["pub_name"].ToString()); } } finally { // 关闭数据库连接 conn.Close(); } } } } ``` 在这个例子中,我们首先创建一个`SqlConnection`实例,然后定义SQL查询语句,并通过`SqlCommand`对象执行这个查询。接着,使用`ExecuteReader`方法创建一个`SqlDataReader`实例,通过`Read()`方法逐行读取结果,并将数据添加到控件中。 2. 使用`Command`和`DataSet`对象读取数据 `DataSet` 提供了一个在内存中存储和操作数据的离线缓存,适用于需要多次遍历数据或进行数据操作的情况。以下是使用`DataSet`的示例: ```csharp using System; using System.Data; using System.Data.SqlClient; public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { // 创建数据库连接 SqlConnection conn = new SqlConnection("server=(local);Initial Catalog=pubs;Integrated Security=True"); // 创建SQL查询 string strsql = "SELECT pub_name FROM publishers"; // 创建SqlCommand对象 SqlCommand comm = new SqlCommand(strsql, conn); try { // 打开数据库连接 conn.Open(); // 创建SqlDataAdapter对象 SqlDataAdapter adapter = new SqlDataAdapter(comm); // 创建一个新的DataSet DataSet dataSet = new DataSet(); // 使用SqlDataAdapter填充DataSet adapter.Fill(dataSet, "Publishers"); // 遍历DataSet中的数据 foreach (DataRow row in dataSet.Tables["Publishers"].Rows) { ListBox1.Items.Add(row["pub_name"].ToString()); } } finally { // 关闭数据库连接 conn.Close(); } } } } ``` 这里,我们创建了`SqlDataAdapter`对象,用于填充`DataSet`。`Fill`方法会将所有查询结果加载到`DataSet`的一个表中,然后我们可以遍历`DataSet`的`Rows`集合来访问数据。 总结来说,`SqlDataReader`适用于只需要一次遍历且数据量较大的情况,而`DataSet`则适合需要多次访问或在内存中操作数据的场景。选择哪种方法取决于具体的应用需求和性能考虑。