有两个方法
A()//执行删除一条记录
B()//执行插入一条记录
要求这个方法进行事务要怎么做到,当执行完函数A()必须执行完B()否则就回滚
代码怎么写!问题比较简单各位牛人别讽刺我

解决方案 »

  1.   

    可以用事务循环插入多条sql语句的,例子:
    protected void Button1_Click(object sender, EventArgs e)
        {
            OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=C:/Inetpub/wwwroot/DotNetArticle/App_Data/DotNetArticle.mdb");
            con.Open(); 
            OleDbCommand cmd = new OleDbCommand();
            cmd.Connection = con;
            cmd.Transaction = con.BeginTransaction();
            try
            {
                string sql1 = "insert into teaminfo (num,username,isplay) values(1,'a',1)";
                string sql2 = "insert into teaminfo (num,username,isplay) values(2,'b',1)";
                string sql3 = "delete from teaminfo where num = 3";
                string[] SQLStringList = { sql1, sql2, sql3 };
                for (int n = 0; n < SQLStringList.Length; n++)
                {
                    string strsql = SQLStringList[n].ToString();
                    if (strsql.Trim().Length > 1)
                    {
                        cmd.CommandText = strsql;
                        cmd.ExecuteNonQuery();
                    }
                }         
                cmd.Transaction.Commit();  //提交事务            
            }
            catch (Exception)
            {
                cmd.Transaction.Rollback();
            }
            finally
            {
                con.Close();
            }
        }
      

  2.   

    能不能
    try
    {
        A();
        B();
    }
    catch (Exception)
    {
        //回滚
    }
    finally
    {
       //释放资源
    }
      

  3.   

      SqlConnection conn = new SqlConnectio("at
                conn.Open();
                SqlTransaction tran = conn.BeginTransaction();
                SqlCommand cmd = conn.CreateCommand();
                cmd.Transaction = tran;
                try
                {
                    cmd.CommandText = "INSERT ";
                    cmd.ExecuteNonQuery();
     
                    cmd.CommandText = "UPDATE ";
                    cmd.ExecuteNonQuery();
     
                    tran.Commit();
                }
                catch (Exception ex)
                {
                    tran.Rollback();
                }
                finally
                {
                    conn.Close();
                }
    或语句在List<string>遍历list执行
      

  4.   


    上面是access数据库的例子,改为sql可以参考5楼..
      

  5.   

    /// <summary>
            /// 执行多条SQL语句,实现数据库事务。
            /// </summary>
            /// <param name="SQLStringList"></param>
            /// <param name="cmdParms"></param>
            /// <returns></returns>
            public static int ExecuteSqlTran(List<String> SQLStringList, List<SqlParameter[]> cmdParms)
            {
                using (SqlConnection connection = new SqlConnection(ConnectionString))
                {
                    connection.Open();
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = connection;
                    SqlTransaction tx = connection.BeginTransaction();
                    cmd.Transaction = tx;
                    try
                    {
                        int iStrCount = SQLStringList.Count;
                        int iParmCount = cmdParms.Count;
                        int count = 0;
                        for (int n = 0; n < iStrCount; n++)
                        {
                            string strsql = SQLStringList[n];
                            SqlParameter[] parms = cmdParms[n];
                            if (strsql.Trim().Length > 1)
                            {
                                PrepareCommand(cmd, connection, null, CommandType.Text, strsql, parms);
                                count += cmd.ExecuteNonQuery();
                                cmd.Parameters.Clear();
                            }
                        }
                        if (iStrCount < iParmCount)
                        {
                            for (int n = iStrCount; n < iParmCount; n++)
                            {
                                string strsql = SQLStringList[iStrCount - 1];
                                SqlParameter[] parms = cmdParms[n];
                                if (strsql.Trim().Length > 1)
                                {
                                    PrepareCommand(cmd, connection, null, CommandType.Text, strsql, parms);
                                    count += cmd.ExecuteNonQuery();
                                    cmd.Parameters.Clear();
                                }
                            }
                        }
                        tx.Commit();
                        return count;
                    }
                    catch (System.Data.SqlClient.SqlException ex)
                    {
                        tx.Rollback();
                        throw new Exception(ex.Message);
                    }
                    finally
                    {
                        cmd.Dispose();
                        connection.Close();
                    }
                }
            }
    这样的方法能改进吗?请指教下