rt
就是为了在bll层可以控制事务,这样有什么不方便的吗,
我问了好几个朋友都是这样做的,不过个人觉得有点繁琐,因为我需不需要事务都一定要传事务参数,

解决方案 »

  1.   

    请问ls,你在bll层调用事务处理是怎么弄的啊,或者根本在bll层就没有事务,全部放到dal层做掉了
      

  2.   

    你可以重载方法啊
    例如:我只是提供思路,方法里面的代码可能并不适合你,你可以根据自己的情况,修改一下/// <summary>
            /// 返回数据访问方法是否执行成功,返回bool值,适用于:增删改,不用于查询!
            /// </summary>
            /// <param name="sql">sql语句</param>
            /// <param name="cmdType">sql语句类型</param>
            /// <param name="connString">数据库连接字符串,这个参数是为多个数据库而设计</param>
            /// <param name="parameters">参数列表</param>
            /// <returns></returns>
            public static bool ExecuteNonQuery(string sql, CommandType cmdType, string connString, params DbParameter[] parameters)
            {
                DbConnection conn = DbFactory.CreateConnection();
                conn.ConnectionString = connString;
                DbCommand cmd = DbFactory.CreateCommand();
                cmd.CommandText = sql;
                cmd.Connection = conn;
                cmd.CommandType = cmdType;
                AddParams(parameters, cmd);
                try
                {
                    Open(conn);
                    int returnCount = 0;
                    returnCount = cmd.ExecuteNonQuery();
                    if (returnCount > 0)
                        return true;
                    return false;
                }
                catch (Exception e)
                {
                    throw e;
                }
                finally
                {
                    Close(conn);
                    cmd.Dispose();
                    cmd.Parameters.Clear();
                }
            }
            /// <summary>
            /// 返回数据访问方法是否执行成功,返回bool值,适用于:增删改,不用于查询!
            /// </summary>
            /// <param name="sql">sql语句</param>
            /// <param name="cmdType">sql语句类型</param>
            /// <param name="transaction">sql事务</param>
            /// <param name="connString">数据库连接字符串,这个参数是为多个数据库而设计</param>
            /// <param name="parameters">参数列表</param>
            /// <returns></returns>
            public static bool ExecuteNonQuery(string sql, CommandType cmdType, DbTransaction transaction, string connString, params DbParameter[] parameters)
            {
                DbConnection conn = DbFactory.CreateConnection();
                conn.ConnectionString = connString;
                DbCommand cmd = DbFactory.CreateCommand();
                cmd.CommandText = sql;
                cmd.Connection = conn;
                cmd.CommandType = cmdType;
                AddParams(parameters, cmd);
                try
                {
                    Open(conn);
                    transaction = conn.BeginTransaction();
                    cmd.Transaction = transaction;
                    int returnCount = 0;
                    returnCount = cmd.ExecuteNonQuery();
                    transaction.Commit();
                    if (returnCount > 0)
                        return true;
                    return false;
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw e;
                }
                finally
                {
                    Close(conn);
                    cmd.Dispose();
                    cmd.Parameters.Clear();
                }
            }