私が次のことをしているとします。
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();
}
何かをきれいに処分し、何が起こっているのかを明確にする必要があります。