假设我正在执行以下操作:
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();
}
应该干净地处理任何东西并弄清楚发生了什么。