문제가있어서 발견 한 모든 기사 나 예제가 신경 쓰이는 것 같습니다.catch 블록에서 롤백 할 SqlTransaction 개체에 액세스 할 수 없습니다.
트랜잭션에서 일부 데이터베이스 작업을 수행하려고합니다. 내가 뭘 원하는 대부분의 예와 매우 유사하다 :
using (SqlConnection Conn = new SqlConnection(_ConnectionString))
{
try
{
Conn.Open();
SqlTransaction Trans = Conn.BeginTransaction();
using (SqlCommand Com = new SqlCommand(ComText, Conn))
{
/* DB work */
}
}
catch (Exception Ex)
{
Trans.Rollback();
return -1;
}
}
그러나 문제는 SqlTransaction Trans
가 try
블록 내에서 선언 된 것입니다. 따라서 catch()
블록에서 액세스 할 수 없습니다. 대부분의 예제는 try
블록 전에 Conn.Open()
과 Conn.BeginTransaction()
을 처리하지만, 둘 다 여러 예외를 throw 할 수 있기 때문에 조금 위험하다고 생각합니다.
내가 잘못 했나요? 아니면 대부분의 사람들이이 위험을 무시합니까? 예외가 발생하는 경우 롤백 할 수있는 가장 좋은 솔루션은 무엇입니까?
P. 예외를 throw하는 대신 -1 (오류 코드)을 반환 하시겠습니까? –