내가 다음을 수행하고 가정 :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()
를 실행하지 않았지만, 내 테스트는 롤백이 암시 적으로 수행되는 것으로 나타났다.
내 질문은 :이 코드는 연결이 누출 되었습니까?
편집 1 : 나는 System.Data.OracleClient
네임 스페이스입니다.
편집 2 : 이것은 모범 사례 코드입니다. 보다 현실적인 시나리오는 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