Предположим, я делаю следующее:
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();
}
Должен аккуратно утилизировать что-либо и прояснить, что происходит.