///<summary>
        ///.net万能事务
        ///</summary>
        ///<param name="cmdtext1">第一个存储过程或者sql语句;</param>
        ///<param name="cmdtext2">第二个存储过程或者sql语句;</param>
        ///<param name="para1">第一个存储过程或者sql的参数</param>
        ///<param name="para2">第二个存储过程或者sql的参数</param>
        ///<param name="ct1">第一个参数的类型(存储过程或者sql)</param>
        ///<param name="ct2">第二个参数的类型(存储过程或者sql)</param>
        public static int procAffairs(string cmdtext1, string cmdtext2, SqlParameter[] para1, SqlParameter[] para2, CommandType ct1,CommandType ct2)
        {
            using (SqlConnection conn = GetConnection())
            {
                    SqlTransaction tran;
                    try
                    {
                        conn.Open();
                        using (SqlCommand cmd1 = new SqlCommand(cmdtext1, conn))
                        {
                            cmd1.Transaction = tran;
                            tran = conn.BeginTransaction();
                            cmd1.CommandType = ct1;
                            cmd1.Parameters.AddRange(para1);
                            cmd1.ExecuteNonQuery();
                        }
                        using (SqlCommand cmd2 = new SqlCommand(cmdtext2, conn))
                        {
                            cmd12.Transaction = tran;
                            tran = conn.BeginTransaction();
                            cmd12.CommandType = ct2;
                            cmd12.Parameters.AddRange(para2);
                            cmd12.ExecuteNonQuery();
                        }
                    }
                    catch (Exception ex)
                    {
                        tran.Rollback();
                        return 0;
                    }
            }
            return 1;
        }

解决方案 »

  1.   

    怎么只有BeginTransaction,没有提交会回滚
      

  2.   


    ///<summary>
            ///.net万能事务
            ///</summary>
            ///<param name="cmdtext1">第一个存储过程或者sql语句;</param>
            ///<param name="cmdtext2">第二个存储过程或者sql语句;</param>
            ///<param name="para1">第一个存储过程或者sql的参数</param>
            ///<param name="para2">第二个存储过程或者sql的参数</param>
            ///<param name="ct1">第一个参数的类型(存储过程或者sql)</param>
            ///<param name="ct2">第二个参数的类型(存储过程或者sql)</param>
            public static int procAffairs(string cmdtext1, string cmdtext2, SqlParameter[] para1, SqlParameter[] para2, CommandType ct1,CommandType ct2)
            {
                using (SqlConnection conn = GetConnection())
                {
                        SqlTransaction tran;
                        try
                        {
                            conn.Open();
                            using (SqlCommand cmd1 = new SqlCommand(cmdtext1, conn))
                            {
                                cmd1.Transaction = tran;
                                tran = conn.BeginTransaction();
                                cmd1.CommandType = ct1;
                                cmd1.Parameters.AddRange(para1);
                                cmd1.ExecuteNonQuery();
                            }
                            using (SqlCommand cmd2 = new SqlCommand(cmdtext2, conn))
                            {
                                cmd12.Transaction = tran;
                                tran = conn.BeginTransaction();
                                cmd12.CommandType = ct2;
                                cmd12.Parameters.AddRange(para2);
                                cmd12.ExecuteNonQuery();
                            }
                            tran.Commit();
                        }
                        catch (Exception ex)
                        {
                            tran.Rollback();
                            return 0;
                        }
                }
                return 1;
            }
      

  3.   


     ///<summary>
            ///.net万能事务
            ///</summary>
            ///<param name="cmdtext1">第一个存储过程或者sql语句;</param>
            ///<param name="cmdtext2">第二个存储过程或者sql语句;</param>
            ///<param name="para1">第一个存储过程或者sql的参数</param>
            ///<param name="para2">第二个存储过程或者sql的参数</param>
            ///<param name="ct1">第一个参数的类型(存储过程或者sql)</param>
            ///<param name="ct2">第二个参数的类型(存储过程或者sql)</param>
            public static int procAffairs(string cmdtext1, string cmdtext2, SqlParameter[] para1, SqlParameter[] para2, CommandType ct1,CommandType ct2)
            {
                using (SqlConnection conn = GetConnection())
                {
                        SqlTransaction tran;
                        SqlCommand cmd;
                        SqlCommand cmd = new SqlCommand();
                        try
                        {
                            conn.Open();
                            tran = conn.BeginTransaction();
                            cmd.Transaction = tran;
                            cmd.Connection = conn;                        //cmd = new SqlCommand(cmdtext1, conn);
                            cmd.CommandText = cmdtext1;
                            cmd.CommandType = ct1;
                            cmd.Parameters.AddRange(para1);
                            cmd.ExecuteNonQuery();                        //cmd = new SqlCommand(cmdtext2, conn);
                            cmd.CommandText = cmdtext2;
                            cmd.CommandType = ct2;
                            cmd.Parameters.AddRange(para2);
                            cmd.ExecuteNonQuery();
                            cmd = new SqlCommand();
                           
                            tran.Commit();
                        }
                        catch (Exception ex)
                        {
                            tran.Rollback();
                            return 0;
                        }
                }
                return 1;
            }高手看下这个对不对