【问题标题】:Error Binding Gridview: "The current TransactionScope is already complete"错误绑定 Gridview:“当前的 TransactionScope 已经完成”
【发布时间】:2010-11-29 00:35:51
【问题描述】:

我在从 Gridview 发送的事件中进行级联删除。删除在事务中。这是简化的代码:

protected void btnDeleteUser_Click(object sender, EventArgs e)
{
    DataContext db;
    db = new DataContext();

    using (TransactionScope ts = new TransactionScope())
    {
        try
        {
            //delete some data
            db.SubmitChanges();

            ts.Complete();
        }
        catch (Exception ex)
        {
            // handle error
        }
        finally
        {
            db.Dispose();
            BindGridView();
        }
    }
}


private void BindGridView()
{
    DataContext db;

    db = new DataContext();

    GridView.DataSource = <my query>

    GridView.DataBind();     <========Exception

    db.Dispose();
}

调用网格的 DataBind() 方法失败,出现以下异常: “当前的 TransactionScope 已经完成。” 为什么?

当然,此时 TransactionScope 已完成,而且应该如此。当我删除 TransactionScope 时,它​​可以工作。

【问题讨论】:

    标签: c# asp.net linq gridview transactionscope


    【解决方案1】:

    将 BindGridView() 移出事务范围。

        using (TransactionScope ts = new TransactionScope())
        {
            try
            {
                //delete some data
                db.SubmitChanges();
    
                ts.Complete();
            }
            catch (Exception ex)
            {
                // handle error
            }
            finally
            {
                db.Dispose();
            }
        }
        BindGridView();
    

    【讨论】:

    • 谢谢。这有助于解决我面临的一个问题。但是,我不确定为什么会出现这个问题。
    • @Phil:GridView 在事务提交后被绑定,但仍在事务范围内。错误消息是:“你把它放在事务中,但我不能执行它,因为你已经提交了事务。”由于事务不需要绑定 GridView,因此将其与事务范围隔离是有意义的。
    猜你喜欢
    • 2018-07-14
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多