Sesuai pertanyaan saya yang lain di sini tentang objek Disposable , haruskah kita memanggil Close () sebelum akhir blok penggunaan?
using (SqlConnection connection = new SqlConnection())
using (SqlCommand command = new SqlCommand())
{
command.CommandText = "INSERT INTO YourMom (Amount) VALUES (1)";
command.CommandType = System.Data.CommandType.Text;
connection.Open();
command.ExecuteNonQuery();
// Is this call necessary?
connection.Close();
}
c#
asp.net
using
sqlconnection
sqlcommand
John Bubriski
sumber
sumber
Pembongkaran SqlConnection dari menggunakan .NET Reflector :
Ini memanggil Close () di dalam Dispose ()
sumber
Kata kunci menggunakan akan menutup koneksi dengan benar sehingga panggilan tambahan untuk Tutup tidak diperlukan.
Dari artikel MSDN di SQL Server Connection Pooling :
Implementasi sebenarnya dari SqlConnection.Dispose menggunakan .NET Reflector adalah sebagai berikut:
sumber
Dengan menggunakan Reflector , Anda dapat melihat bahwa
Dispose
metodeSqlConnection
sebenarnya memanggilClose()
;sumber
Tidak, memanggil Dispose () pada SqlConnection juga memanggil Close ().
MSDN - SqlConnection.Dispose ()
sumber
Tidak, tetap menggunakan panggilan blokir
Dispose()
untuk Anda, jadi tidak perlu meneleponClose()
.sumber
Dispose()
panggilanClose()
, bukan sebaliknya?Tidak, tidak perlu Menutup koneksi sebelum memanggil Buang.
Beberapa objek, (seperti SQLConnections) dapat digunakan kembali setelah memanggil Tutup, tetapi tidak setelah memanggil Buang. Untuk objek lain, memanggil Tutup sama dengan memanggil Buang. (ManualResetEvent dan Streams menurut saya berperilaku seperti ini)
sumber
Tidak, kelas SqlConnection mewarisi dari IDisposable, dan ketika akhir penggunaan (untuk objek koneksi) ditemui, secara otomatis memanggil kelas Buang di SqlConnection.
sumber