加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在C#中使用带有类型化数据集的事务?

发布时间:2020-12-16 01:42:20 所属栏目:百科 来源:网络整理
导读:你好 如何使用带有类型化数据集的事务?假设我有一个记录表和记录详细信息表,我将在记录表中保存一个,并在记录详细信息表中保存所有详细信息. 我该怎么用?我发现事务可以用于非类型化数据集,但我没有看到它与类型化数据集.谁能告诉我应该怎么办? 凯文 解决
你好
如何使用带有类型化数据集的事务?假设我有一个记录表和记录详细信息表,我将在记录表中保存一个,并在记录详细信息表中保存所有详细信息.
我该怎么用?我发现事务可以用于非类型化数据集,但我没有看到它与类型化数据集.谁能告诉我应该怎么办?

凯文

解决方法

CodeProject上有一个 nice article(和代码),关于如何扩展类型化数据集以启用事务,而不会在使用TransactionScope时将它们提升为分布式事务.

简介:使用事务范围和在partial类上添加的方法来修改底层SqlCommand对象以参与同一事务.

using (SqlTransaction transaction = connection.BeginTransaction())
{
       // These methods will update all relevant command objects’ transaction property
       adapter1.EnlistTransaction(transaction);
       adapter2.EnlistTransaction(transaction);

       adapter1.Update(table1);
       adapter2.Update(table2);

       transaction.Commit();
}

来自参考的适配器的代码示例:

public partial class [TableAdapterName]
{
    public void EnlistTransaction(System.Data.SqlClient.SqlTransaction transaction)
    {
        System.Data.SqlClient.SqlTransaction _transaction;

        if (this._transaction != null)
        {
            throw new System.InvalidOperationException
        ("This adapter has already been enlisted in a transaction");
        }
        else
        {
            this._transaction = transaction;
            Adapter.UpdateCommand.Transaction = _transaction;
            Adapter.InsertCommand.Transaction = _transaction;
            Adapter.DeleteCommand.Transaction = _transaction;
        }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读