Perhatikan bahwa membuang SqlDataReader yang dibuat menggunakan SqlCommand.ExecuteReader () tidak akan menutup / membuang koneksi yang mendasarinya.
Ada dua pola umum. Yang pertama, pembaca dibuka dan ditutup dalam ruang lingkup koneksi:
using(SqlConnection connection = ...)
{
connection.Open();
...
using(SqlCommand command = ...)
{
using(SqlDataReader reader = command.ExecuteReader())
{
... do your stuff ...
}
}
}
Terkadang nyaman untuk memiliki metode akses data membuka koneksi dan mengembalikan pembaca. Dalam hal ini, pembaca yang dikembalikan harus dibuka menggunakan CommandBehavior.CloseConnection, sehingga menutup / membuang pembaca akan menutup koneksi yang mendasarinya. Polanya terlihat seperti ini:
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;
}
}
dan kode panggilan hanya perlu membuang pembaca sebagai berikut:
using(SqlDataReader reader = ExecuteReader(...))
{
... do your stuff ...
}