延迟回滚(ado.net)不工作

本文关键字:工作 net ado 延迟 | 更新日期: 2023-09-27 18:11:37

我希望在示例c#桌面应用程序中进行某种延迟回滚(不是批量回滚)一个按钮插入数据,另一个按钮回滚数据

我尝试了以下操作,但不工作

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();
    }

我所尝试的是可能的吗?还是我用错了方向?

延迟回滚(ado.net)不工作

少年。

从技术上讲,你在button2_Click中的所有内容都是"new",因此没有"tie back"到原始的"begin transaction"语句。

但是我真的不认为你想做手动的"开始事务"answers"回滚事务"语句。

我~~认为~~你想试着让这个变量:

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

this "tran"变量是作用域大于一个命令按钮的成员变量。(让我们假设你把它作为一个成员变量,并重命名为_transaction)

,然后调用

_transaction.Rollback();

_transaction.Commit()

但哇。这太不靠谱了。我只是给你一个想法,如果你真的想做的话。