我很好奇以下代码是否被认为安全吗?

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的目的。

10-02 17:22
查看更多