0

重複
の可能性:「使用中」のブロックで、戻りまたは例外時にSqlConnectionが閉じられますか?

これでこれをusing閉じます_connectionか?

using(SqlConnection _connection = Class1.GetSqlConnection())  
{   //code inside the connection
}

//connection should be closed/ended?

GetSqlConnection()の静的関数でClass1あり、ストレートではなく外部クラスの静的関数を呼び出しているため、接続全体が閉じられない可能性があるため、私は疑問に思っていますか?

 using(SqlConnection _connection = new SqlConnection(_connectionString)
 {   //code inside the connection
 }
4

3 に答える 3

1

このusingステートメントは、変数がその値を取得する方法を気にしません。静的関数、メンバー関数、new演算子、またはその他の方法からの値です。の閉じ中括弧にusing達するとすぐDispose()に、変数のメソッドが呼び出され、IDbConnectionインスタンスの場合は接続を閉じるか、破棄時に他のIDisposableことを実行します。

于 2012-10-05T03:07:57.883 に答える
0

はい、そうです。

GetSqlFunctionメソッドを実装して、より明示的な動作を実現する別の方法を次に示します。

public class Class1
{
    private static SqlConnection GetSqlConnection() { /* unchanged */ }

    public static void UseSqlConnection(Action<SqlConnection> action)
    {
        using (var connection = Class1.GetSqlConnection())
        {
            action(connection);
        }
    }
}

それからあなたはそれをそのように呼びます:

Class1.UseSqlConnection(c =>
{
    /* use connection here */
});

次に、このメソッドを拡張して、好みのセマンティクスに応じて、既存の接続を使用するか、新しい接続を作成できます。

于 2012-10-05T03:13:20.767 に答える
0

はい、設計によるものです。

usingブロックは、ブロックが終了したときに使い捨てのオブジェクトの廃棄を処理するために使用されます。オブジェクトに対してとは、そのDispose()オブジェクトのすべてのリソースを解放することを意味します。などのオブジェクトの場合SqlConnection、これにより接続が閉じられます。

于 2012-10-05T03:08:31.490 に答える