三层架构中事务处理

    

数据访问层:

      /// <summary>
    /// 执行所有无返回语句
    /// </summary>
    /// <param name="coms"></param>
    /// <returns>true执行事务成功,false执行事务失败</returns>
    public bool DoTran(SqlCommand[] coms)
    {
        string strSql = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
        SqlConnection myConn = new SqlConnection(strSql);
        myConn.Open();
        SqlCommand myComm = new SqlCommand();
        SqlTransaction myTran;
        myTran = myConn.BeginTransaction();
        myComm.Connection = myConn;
        myComm.Transaction = myTran;
        try
        {
            for (int i = 0; i < coms.Length; i++)
            {
                myComm.CommandText = coms[i].CommandText;
                myComm.Parameters.Clear();
                SqlParameter[] clonedParameters = new SqlParameter[coms[i].Parameters.Count];
                for (int m = 0, n = coms[i].Parameters.Count; m < n; m++)
                {
                    clonedParameters[m] = (SqlParameter)((ICloneable)coms[i].Parameters[m]).Clone();
                }

                if (clonedParameters != null)
                {
                    foreach (SqlParameter parameter in clonedParameters)
                    {
                        myComm.Parameters.Add(parameter);
                    }
                }
                myComm.ExecuteNonQuery();
            }
            myTran.Commit();
            myConn.Close();
            return true;
        }
        catch
        {
            myTran.Rollback();
            myConn.Close();
            return false;
        }
    }

posted on 2009-06-19 15:50  heart-in-sky  阅读(510)  评论(1编辑  收藏  举报