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();
}
}
}
一般的なルールに次のようになります。それはIDisposableインターだ場合は、 –
@icを完了したら、それを処分します。私の質問は、sqlConnectionを削除すると、残りのオブジェクト(slqTransactionなど)がすべて自動的に破棄されるのか、それとも入れ子にされた「使用」ブロックにあるべきかということです。 – Ilan
これは私が答えの代わりにコメントとして書いた理由です。:)一般的には、私は物事の内部の動作については心配しませんが、特にバージョンごとに変更される傾向があるためです。私が作成するものが使い捨てであれば、それを処分する必要があります。 –