延迟回滚(ado.net)无法正常工作

时间:2013-05-01 17:23:49

标签: c# sql-server ado.net rollback

我希望在示例c#desktop app中进行某种延迟回滚(不是批处理) 1按钮插入数据,另一个按回滚

我尝试了以下但是它无效

error:  The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION.

private void button1_Click(object sender, EventArgs e)
    {
        SqlConnection conn = new SqlConnection(ConnectionString);
        //conn = new SqlConnection(ConnectionString);
        conn.Open();
        try
        {
            //tran = conn.BeginTransaction("Transaction1");
            SqlCommand cmd = new SqlCommand("begin transaction", conn);
            SqlCommand cmd1 = new SqlCommand("insert into employee values ('6','aaaaaa','111')", conn);
            cmd.ExecuteNonQuery();
            cmd1.ExecuteNonQuery();
            conn.Close();

        }
        catch { }
    }
    private void button2_Click(object sender, EventArgs e)
    {
        SqlConnection conn = new SqlConnection(ConnectionString);
        conn.Open();
        SqlCommand cmd2 = new SqlCommand("rollback transaction", conn);
        cmd2.ExecuteNonQuery();
        conn.Close();
    }

我正在尝试甚至可能吗?或者我只是以错误的方式去做?

1 个答案:

答案 0 :(得分:0)

Youch。

技术上,你在button2_Click中拥有的一切都是“新的”,所以没有“绑回”原始的“开始交易”声明。

但我真的不认为你想做手册“开始交易”和“回滚交易”的陈述。

我想~~你想尝试制作这个变量:

**tran** = conn.BeginTransaction("Transaction1");

这个“tran”变量是一个成员变量,其范围大于一个命令按钮。 (假设您将其设为成员变量并将其重命名为_transaction)

然后调用

_transaction.Rollback();

_transaction.Commit()

但哇。那太好了。如果你真的喜欢这样做,我只是想给你一个想法。