using
Tingkah laku penutup SqlConnection dalam blok pernyataan: mengembalikan nilai dan pengecualian
using
Adakah blok penyata akan ditutup SqlConnection
apabila dikembalikan atau pengecualian? Mari terokai tingkah laku ini:
Soalan pertama:
Dalam blok kod berikut:
<code class="language-csharp">using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); string storedProc = "GetData"; SqlCommand command = new SqlCommand(storedProc, connection); command.CommandType = CommandType.StoredProcedure; command.Parameters.Add(new SqlParameter("@EmployeeID", employeeID)); return (byte[])command.ExecuteScalar(); }</code>
Jawapan: Ya, sambungan akan ditutup.
Blok pernyataanusing
memastikan bahawa IDisposable
sumber (iaitu SqlConnection
) dikeluarkan dengan betul walaupun sekiranya pemulangan awal. Apabila kod keluar dari blok using
, kaedah Dispose()
(yang menutup sambungan) dipanggil secara automatik.
Soalan kedua:
Dalam blok kod ini:
<code class="language-csharp">try { using (SqlConnection connection = new SqlConnection(connectionString)) { int employeeID = findEmployeeID(); connection.Open(); SqlCommand command = new SqlCommand("UpdateEmployeeTable", connection); command.CommandType = CommandType.StoredProcedure; command.Parameters.Add(new SqlParameter("@EmployeeID", employeeID)); command.CommandTimeout = 5; command.ExecuteNonQuery(); } } catch (Exception) { /*处理错误*/ }</code>
Jawapan: Ya, sambungan masih akan ditutup.
Walaupun pengecualian dilemparkan dalam blok pernyataan using
, kod akan segera melompat ke blok catch
dan apabila keluar dari blok pernyataan using
, SqlConnection
masih akan dikeluarkan.
Ringkasan:
Tidak kira sama ada blok pernyataan using
keluar melalui nilai pulangan atau pengecualian, SqlConnection
akan sentiasa ditutup untuk memastikan pembersihan sumber.
Atas ialah kandungan terperinci Adakah SqlConnection Ditutup dalam Blok 'Menggunakan' pada Pulangan atau Pengecualian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!