Mam problem, a wszystkie artykuły i przykłady, które znalazłem, wydają się nie przejmować tym.Nie można uzyskać dostępu do obiektu SqlTransaction w celu wycofania w bloku catch
Chcę wykonać niektóre operacje bazy danych w transakcji. Co chcę zrobić jest bardzo podobna do większości przykładów:
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;
}
}
Ale problemem jest to, że SqlTransaction Trans
jest zadeklarowana wewnątrz bloku try
. Więc nie jest dostępny w bloku catch()
. Większość przykładów po prostu robi Conn.Open()
i Conn.BeginTransaction()
przed blokiem try
, ale myślę, że to trochę ryzykowne, ponieważ obie mogą zgłaszać wiele wyjątków.
Czy jestem w błędzie, czy większość ludzi po prostu ignoruje to ryzyko? Jakie jest najlepsze rozwiązanie, aby móc wycofać, jeśli wystąpi wyjątek?
P.S. czy na pewno chcesz zwrócić -1 (kod błędu) zamiast rzucać wyjątek? –