SqlDataReader用于高效读取只进只读数据流,使用步骤包括建立连接、执行命令、读取数据和释放资源。需保持连接打开直至读取完成,通过Read()方法逐行读取,用列名或索引获取值,并推荐用using语句确保资源释放。

在C#中,SqlDataReader 用于从数据库高效地读取只进、只读的数据流。它适用于需要快速访问大量数据的场景,比如逐行读取查询结果。
基本使用步骤
使用 SqlDataReader 的典型流程包括:建立连接、执行命令、读取数据、关闭资源。注意必须保持连接打开直到读取完成。
- 使用 SqlConnection 建立数据库连接
- 通过 SqlCommand 执行 SELECT 查询
- 调用 ExecuteReader() 获取 SqlDataReader 对象
- 用 Read() 方法逐行读取数据
- 使用索引或列名获取字段值
- 正确释放资源(推荐使用 using 语句)
完整示例代码
以下是一个使用 SqlDataReader 读取用户表数据的示例:
using System;
using System.Data;
using Microsoft.Data.SqlClient; // .NET 6+ 使用 Microsoft.Data.SqlClient
class Program
{
static void Main()
{
string connectionString = "Server=localhost;Database=TestDB;User Id=sa;Password=your_password;";
string query = "SELECT Id, Name, Email FROM Users";
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(query, connection);
try
{
connection.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
int id = reader.GetInt32("Id");
string name = reader["Name"].ToString();
string email = reader["Email"] as string;
Console.WriteLine($"ID: {id}, Name: {name}, Email: {email}");
}
reader.Close(); // 关闭读取器
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
}
} // 连接自动关闭
}
}注意事项与最佳实践
使用 SqlDataReader 时应注意以下几点以避免常见问题:
- 确保连接字符串正确,并且数据库服务正在运行
- Always use using 语句确保连接和读取器被正确释放
- 调用 Read() 方法前进到下一行,返回 false 表示已到末尾
- 可通过列名或序号访问数据,如 reader["Name"] 或 reader[1]
- 根据数据类型选择合适的 Get 方法(GetInt32, GetString, GetDateTime 等)更高效且安全
- 不要在关闭连接后尝试读取数据
基本上就这些。SqlDataReader 轻量高效,适合读取大量数据的场景,但需注意及时释放资源。










