У меня проблема, и все статьи или примеры, которые я нашел, по-видимому, не заботятся об этом.
Я хочу сделать некоторые действия с базами данных в транзакции. То, что я хочу сделать, очень похоже на большинство примеров:
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()
. Большинство примеров просто Conn.Open()
и Conn.BeginTransaction()
перед блоком try
, но я думаю, что это немного рискованно, так как оба могут делать несколько исключений.
Я ошибаюсь, или большинство людей просто игнорируют этот риск? Какое лучшее решение для отката, если происходит исключение?