C# using
ブロックと SqlConnection
破棄: 例外とリターン
C# の using
ステートメントは、使い捨てリソースをエレガントに管理し、例外や早期返却が発生した場合でも適切な解放を保証します。 これが SqlConnection
オブジェクトにどのように適用されるかを調べてみましょう。
シナリオ 1: using
ブロックから戻る
次のコード スニペットを考えてみましょう:
<code class="language-csharp">using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); // Database operations return (byte[])command.ExecuteScalar(); }</code>
return
ステートメントは、using
ブロックによるクリーンアップの実行を妨げません。 SqlConnection
の Dispose()
メソッドは、ブロックの右中括弧 }
に到達すると自動的に呼び出され、接続が確実に閉じられます。
シナリオ 2: using
ブロック内の例外
次に、例外処理を見てみましょう:
<code class="language-csharp">try { using (SqlConnection connection = new SqlConnection(connectionString)) { int employeeID = findEmployeeID(); connection.Open(); // Database operations command.ExecuteNonQuery(); } } catch (Exception ex) { /* Handle exception: log, rethrow, etc. */ }</code>
try
ブロック内で例外がスローされた場合でも、using
ブロックの Dispose()
メソッドは実行されます。 SqlConnection
は確実に閉じられ、リソースのリークを防ぎます。
最適なコード構造
using
ブロックはリソース管理を効果的に処理しますが、try-catch
ブロックを ブロックの内側using
にネストすると、コードの可読性と保守性が向上します。
<code class="language-csharp">using (SqlConnection connection = new SqlConnection(connectionString)) { int employeeID = findEmployeeID(); try { connection.Open(); // Database operations command.ExecuteNonQuery(); } catch (Exception ex) { /* Handle exception: log, rethrow, etc. */ } }</code>
このアプローチでは、データベースの対話と例外処理が明確に分離され、コードの理解とデバッグが容易になります。 using
ブロックは、try-catch
ブロックの結果に関係なく、引き続き接続の終了を担当します。
以上が例外または戻りが発生した場合、C# で `using` ブロックはどのように `SqlConnection` クロージャを処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。