Bir SqlDataReader bertaraf SqlCommand.ExecuteReader (kullanarak örneği olduğunu Not) olacak değil yakın / altta yatan bağlantı imha edin.
İki ortak model var. İlkinde okuyucu bağlantı kapsamında açılır ve kapanır:
using(SqlConnection connection = ...)
{
connection.Open();
...
using(SqlCommand command = ...)
{
using(SqlDataReader reader = command.ExecuteReader())
{
... do your stuff ...
}
}
}
Bazen bir veri erişim yönteminin bir bağlantı açıp bir okuyucuya geri dönmesi uygun olur. Bu durumda, döndürülen okuyucunun CommandBehavior.CloseConnection kullanılarak açılması önemlidir, böylece okuyucuyu kapatmak / elden çıkarmak temeldeki bağlantıyı kapatacaktır. Desen şuna benzer:
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
{
connection.Close();
throw;
}
}
ve çağıran kodun okuyucuyu bu şekilde elden çıkarması yeterlidir:
using(SqlDataReader reader = ExecuteReader(...))
{
... do your stuff ...
}