Lưu ý rằng việc hủy bỏ một SqlDataReader được khởi tạo bằng SqlCommand.ExecuteReader () sẽ không đóng / hủy kết nối cơ bản.
Có hai mẫu phổ biến. Trong lần đầu tiên, đầu đọc được mở và đóng trong phạm vi kết nối:
using(SqlConnection connection = ...)
{
connection.Open();
...
using(SqlCommand command = ...)
{
using(SqlDataReader reader = command.ExecuteReader())
{
... do your stuff ...
} // reader is closed/disposed here
} // command is closed/disposed here
} // connection is closed/disposed here
Đôi khi, thật tiện lợi khi có một phương thức truy cập dữ liệu mở kết nối và trả về một đầu đọc. Trong trường hợp này, điều quan trọng là trình đọc trả về phải được mở bằng CommandBehavior.CloseConnection, vì vậy việc đóng / hủy bỏ trình đọc sẽ đóng kết nối cơ bản. Mô hình trông giống như sau:
public SqlDataReader ExecuteReader(string commandText)
{
SqlConnection connection = new SqlConnection(...);
try
{
connection.Open();
using(SqlCommand command = new SqlCommand(commandText, connection))
{
return command.ExecuteReader(CommandBehavior.CloseConnection);
}
}
catch
{
// Close connection before rethrowing
connection.Close();
throw;
}
}
và mã gọi chỉ cần loại bỏ đầu đọc do đó:
using(SqlDataReader reader = ExecuteReader(...))
{
... do your stuff ...
} // reader and connection are closed here.