将 TransactionScope 与类型化数据集结合使用

发布于 2024-07-25 09:41:47 字数 1336 浏览 5 评论 0原文

我有一个 WinForm 应用程序,使用类型化数据集表适配器查询 SqlCe 数据库。 我有一个主窗体程序集和一个处理每个数据库操作的数据库程序集。 我在事务中使用 tableadapter 进行更新时遇到问题,如果有人能给我任何想法,我将不胜感激。

Update() 方法给出此错误:

"The connection object can not be enlisted in transaction scope."

这是我的代码:

namespace Main
{
    public class MainForm
    {
        private MyDbAssembly.MyDbClass db;

        //instantiate and db fill methods omitted..

        private void DeleteStuff()
        {
            using (TransactionScope trans = new TransactionScope())
            {
                this.db.Delete(id);
                UpdateDb();

                trans.Complete();
            }
        }

        private void UpdateDb()
        {
            //bindingsource endedit & datagridview endedit methods omitted..
            this.db.Update();
        }
    }
}

namespace MyDbAssembly
{
    public class MyDbClass
    {
        private myTypedDataset myDataSet;
        private myTypedDataSetTableAdapter.MyTable1Adapter table1Adapter;

        //instantiate methods omitted..

        public void Delete(Guid id)
        {
            this.myDataSet.MyTable1.FindByID(id).Delete();  
        }

        public void Update()
        {
            this.table1Adapter.Update(myDataSet.MyTable); //<-- ERROR LINE
        }
    }
}

I have a WinForm application querying SqlCe database using typed-dataset tabledapters. I have a main form assembly and a database assembly which handles every db operation. I'm having problems with updating using tableadapter in a transaction and I'd appreciate if anyone could give me any ideas why.

Update() method gives this error:

"The connection object can not be enlisted in transaction scope."

Here's my code:

namespace Main
{
    public class MainForm
    {
        private MyDbAssembly.MyDbClass db;

        //instantiate and db fill methods omitted..

        private void DeleteStuff()
        {
            using (TransactionScope trans = new TransactionScope())
            {
                this.db.Delete(id);
                UpdateDb();

                trans.Complete();
            }
        }

        private void UpdateDb()
        {
            //bindingsource endedit & datagridview endedit methods omitted..
            this.db.Update();
        }
    }
}

namespace MyDbAssembly
{
    public class MyDbClass
    {
        private myTypedDataset myDataSet;
        private myTypedDataSetTableAdapter.MyTable1Adapter table1Adapter;

        //instantiate methods omitted..

        public void Delete(Guid id)
        {
            this.myDataSet.MyTable1.FindByID(id).Delete();  
        }

        public void Update()
        {
            this.table1Adapter.Update(myDataSet.MyTable); //<-- ERROR LINE
        }
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

能怎样 2024-08-01 09:41:47

因为您在 TransactionScope trans 范围之外创建了 table1Adapter。

Because you created the table1Adapter outside the TransactionScope trans scope.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文