我很好奇以下代码是否被认为安全吗?
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();
}
}
}
}
我想通过ref传递事务'tr',但不能,因为它在“ using”构造内。
我想听听类似情况下更好方法的建议。
问候
最佳答案
您无需通过引用传递交易。它是一种引用类型,因此当您将其传递给函数时,您已经在提供引用。你在做什么很好。
尽管您的代码还有很多其他问题,但与您的问题没有直接关系:
您确实应该使用throw;
而不是throw myErr;
。
如果您已经在using
语句中使用了资源,则无需显式处理资源。这就是using
的目的。