代码如下:
删除一个id为3的记录(数据库中存在此记录)
删除一个id为100的记录(数据库中不存在此记录)
封装为事务,应Rollback(),但就是不执行,try中的语名执行完,直接跳到了finallyprotected void Button4_Click(object sender, EventArgs e)
    {
        string connectionString = WebConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
        using (SqlConnection testConnection = new SqlConnection(connectionString))
        {
            SqlCommand myCommand = testConnection.CreateCommand();
            SqlTransaction myTransaction = null;
            try
            {
                testConnection.Open();
                myTransaction = testConnection.BeginTransaction();
                myCommand.Transaction = myTransaction;
                myCommand.CommandText = "delete test where id=3";
                myCommand.ExecuteNonQuery();
                myCommand.CommandText = "delete test where id=100";
                myCommand.ExecuteNonQuery();
                myTransaction.Commit();
                Response.Write("执行成功!");
            }
            catch (System.Exception)
            {
                myTransaction.Rollback();
                Response.Write("没有执行!");
            }
            finally
            {
                testConnection.Close();
            }
        }
    }
急!!!!!!!!!!!!!

解决方案 »

  1.   

    你又没有出错怎么会跳到catch 里面,楼主还是先看看try catch是什么意思吧
      

  2.   

    你只在出错时设置了Rollback,没有其他Rollback呀
    程序没出错的话,肯定执行不到catch语句
      

  3.   

    myCommand.CommandText = "delete test where id=100"; 
    这条语句并没有错,只是“(所影响的行数为 0 行)”,所以事务不会Rollback()
    个人拙见!!!!
      

  4.   

    帮你改了下 string connectionString = WebConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
            using (SqlConnection testConnection = new SqlConnection(connectionString))
            {
                SqlCommand myCommand = testConnection.CreateCommand();
                SqlTransaction myTransaction = null;
                try
                {
                    int[] i = new int[2];//记录删除记录数
                    testConnection.Open();
                    myTransaction = testConnection.BeginTransaction();
                    myCommand.Transaction = myTransaction;
                    myCommand.CommandText = "delete test where id=3";
                    i[0] = myCommand.ExecuteNonQuery();
                    myCommand.CommandText = "delete test where id=100";
                    i[1] = myCommand.ExecuteNonQuery();
                    if (i[0] == 0 || i[1] == 0)
                    {
                        myTransaction.Rollback();
                        Response.Write("没有执行!");
                    }
                    else
                    {
                        myTransaction.Commit();
                        Response.Write("执行成功!");
                    }            }
                catch (System.Exception)
                {
                    myTransaction.Rollback();
                    Response.Write("没有执行!");
                }
                finally
                {
                    testConnection.Close();
                }
            }
      

  5.   

    myCommand.CommandText = "delete test where id=3"; 
    MCommand.ExecuteNonQuery(); 
    这里改成int recordAffected=mycommand.ExecuteNonQuery();用来返回的行数
    if(recordAffected<=0) trans.RollBackTrans();//返回
    myCommand.CommandText = "delete test where id=100";