I've got a problem, and all articles or examples I found seem to not care about it.
I want to do some database actions in a transaction. What I want to do is very similar to most examples:
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;
}
}
But the problem is that the SqlTransaction Trans
is declared inside the try
block. So it is not accessable in the catch()
block. Most examples just do Conn.Open()
and Conn.BeginTransaction()
before the try
block, but I think that's a bit risky, since both can throw multiple exceptions.
Am I wrong, or do most people just ignore this risk?
What's the best solution to be able to rollback, if an exception happens?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…