Tôi gặp sự cố và tất cả các bài viết hoặc ví dụ tôi thấy dường như không quan tâm đến nó.Không thể truy cập đối tượng SqlTransaction để khôi phục trong khối catch
Tôi muốn thực hiện một số hành động cơ sở dữ liệu trong giao dịch. Những gì tôi muốn làm là rất giống với hầu hết các ví dụ:
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;
}
}
Nhưng vấn đề là các SqlTransaction Trans
được khai báo bên trong khối try
. Vì vậy, nó không thể truy cập trong khối catch()
. Hầu hết các ví dụ chỉ cần thực hiện Conn.Open()
và Conn.BeginTransaction()
trước khối try
, nhưng tôi nghĩ đó là một chút rủi ro, vì cả hai có thể ném nhiều ngoại lệ.
Tôi có sai hay hầu hết mọi người chỉ bỏ qua rủi ro này? Giải pháp nào tốt nhất để có thể khôi phục, nếu một ngoại lệ xảy ra?
P.S. bạn có chắc chắn muốn trả về -1 (mã lỗi) thay vì ném một ngoại lệ không? –