2017-11-15 9 views
0

がされているオブジェクトALL SqlCommandオブジェクトは、のSqlTransactionとSqlDataAdapterオブジェクトがが自動的(SqlConnectionオブジェクトが配置されている)「を使用して」ブロックからの出口に配置された、またはすべてのこれらのオブジェクトが配置されるようにオブジェクトは分離されたブロックをネストして使用する必要があります。そうしないと、sqlConnectionオブジェクトが破棄されたときにこれらのオブジェクトが破棄されません。ベストプラクティスは何ですか?オブジェクトがIDisposableを実装している場合ベスト・プラクティスは、SqlDataAdapterオブジェクトは

public static void ExecuteDataset(string connectionString, string storedProcedure, SqlParameter[] sqlParameters = null) 
{ 
    SqlTransaction sqlTransaction = null; 

    using (SqlConnection sqlConnection = new SqlConnection(connectionString)) 
    { 
     try 
     { 
      sqlConnection.Open(); 

      SqlCommand sqlCommand = new SqlCommand(commandText, connection); 
      command.Parameters.Add("@ID", SqlDbType.Int); 

      sqlCommand.Connection = sqlConnection; 
      SqlTransaction = sqlConnection.BeginTransaction(); 
      sqlCommand.Transaction = sqlTransaction; 
      ..................................................... 
      .....................................................  

      SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); 

       ................................ 
       ................................ 


      sqlTransaction.Commit(); 
     } 
     catch (Exception) 
     { 
      sqlTransaction.Rollback(); 
     } 
    }   
} 
+1

一般的なルールに次のようになります。それはIDisposableインターだ場合は、 –

+0

@icを完了したら、それを処分します。私の質問は、sqlConnectionを削除すると、残りのオブジェクト(slqTransactionなど)がすべて自動的に破棄されるのか、それとも入れ子にされた「使用」ブロックにあるべきかということです。 – Ilan

+1

これは私が答えの代わりにコメントとして書いた理由です。:)一般的には、私は物事の内部の動作については心配しませんが、特にバージョンごとに変更される傾向があるためです。私が作成するものが使い捨てであれば、それを処分する必要があります。 –

答えて

3

その後、usingを使用しています。 SqlConnectionまたはSqlCommandまたはその他のオブジェクトの基本的な実装の詳細は重要ではありません。

あなたのシナリオのためのベストプラクティスは、

using(var conn = new SqlConnection(...)) { 
    ... 
    using(var cmd = conn.CreateCommand(...)) { 
    ... 
    } 
    ... 
} 
関連する問題