I’m curious if following code would be considered safe?
using (SqlConnection cn = new SqlClient.SqlConnection(connectionString))
{
cn.Open();
using (SqlTransaction tr = cn.BeginTransaction())
{
try
{
if (!Data.DoSomething1(tr, p1, p2))
{
tr.Rollback();
return false;
}
foreach (ItemType item in Items)
{
if (!Data.DoSomething2(tr, p3, p4))
{
tr.Rollback();
return false;
}
}
tr.Commit();
return true;
}
catch (Exception myErr)
{
if (tr != null)
tr.Rollback();
throw myErr;
}
finally
{
if (cn != null)
{
cn.Close();
cn.Dispose();
}
}
}
}
I wanted to pass transaction ‘tr’ by ref but couldn’t because it is within “using” construct.
I would like to hear suggestions for better approach in similar situations.
Regards
You don’t need to pass the transaction by reference. It is a reference type so when you pass it to a function you are already providing a reference. What you are doing is fine.
Although there’s a couple of other things about your code, not directly related to your question:
throw;notthrow myErr;.usingstatement. That’s what theusingis for.