は、私は次のことをやっていると仮定します。ADO.NET、事前コミットまたはロールバックなしでOracleConnectionを終了する:リークしますか?
using (OracleConnection conn = new OracleConnection(connStr))
{
OracleTransaction trans = conn.BeginTransaction();
OracleCommand command = new OracleCommand(cmdTxt, conn, trans);
// this statement is executed in a transaction context:
command.ExecuteNonQuery();
}
// the using statement will dispose and thus close the connection.
// a rollback is done implicitly
私はtransaction.Rollback()
を実行しませんでしたが、私のテストは、ロールバックが暗黙的に行われることを示しました。
私の質問です:このコードは接続やその他のものを漏らしますか?
Edit1:私はSystem.Data.OracleClient
名前空間です。
Edit2:これは不合理なサンプルコードです。より現実的なシナリオは、usingステートメント内で例外が発生し、Commit()
ステートメントがまだ実行されていない場合です。
EDIT3:答えから私は、これが良好であることを考える:
using (OracleConnection conn = new OracleConnection(connStr))
using (OracleTransaction trans = conn.BeginTransaction())
using (OracleCommand command = new OracleCommand(cmdTxt, conn, trans))
{
command.ExecuteNonQuery();
trans.Commit();
}
はきれいに何を配置し、何が起こっているかを明確にすべきです。
OracleCommandと同じです。使い捨てのものは、おそらく使用ブロックに入れて処分する必要があります。 –
ありがとうジョン - 更新されました。 – itowlson