对多个方法 C# 使用单个事务?

Posted

技术标签:

【中文标题】对多个方法 C# 使用单个事务?【英文标题】:Using a single transaction for multiple method C#? 【发布时间】:2016-06-23 08:49:17 【问题描述】:

假设我有一个插入按钮,其中有多个方法,它们在数据库中读取、插入和更新等。是否可以对所有这些调用的方法使用单个事务? 点赞:

private void method_A()/* doing tons of db stuff.. */
private void method_B()/*..*/
private void method_C()/*..*/


protected void Insert_OnClick(object sender, EventArgs e)

    //begin transaction

    Method_A();

    Method_B();

    Method_C();

    //end transaction


这种方式可行吗?以前从未使用过事务。 顺便说一句,如果这很重要,请使用 MS Access db。

【问题讨论】:

你见过this吗? @PaulF 它没有显示如何通过 C# 实现事务,或者如果我简单地添加 BEGIN TRANSACTION .. C# 代码和方法.. COMMIT [TRANSACTION | WORK] ROLLBACK [TRANSACTION | WORK] 会起作用吗?跨度> 【参考方案1】:
    using (OleDbConnection connection =
                   new OleDbConnection(connectionString))
        
            OleDbCommand command = new OleDbCommand();
            OleDbTransaction transaction = null;

            // Set the Connection to the new OleDbConnection.
            command.Connection = connection;

            // Open the connection and execute the transaction.
            try
            
                connection.Open();
                transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
  transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);

            // Assign transaction object for a pending local transaction.
            command.Connection = connection;
            command.Transaction = transaction;

                Method1(command.connection);
                Method2(command.connection);

            
    

类似的东西?

所以你使用一个连接,然后设置事务级别并运行你的方法。

查看这里了解更多信息:https://msdn.microsoft.com/en-us/library/93ehy0z8(v=vs.110).aspx

【讨论】:

Method1();Method2(); 现在会在事务中还是我必须在参数中传递任何内容? @Nyprez 我相信你必须通过连接。但我认为交易应该保留 @Andrew Kilburn 是 command 还是 connection 我应该传递给 Method1();Method2(); @您需要传递连接,但如果您想一次执行所有命令,您可以通过将命令变量传递到您的方法中并返回它。 @Nyprez 进展如何?

以上是关于对多个方法 C# 使用单个事务?的主要内容,如果未能解决你的问题,请参考以下文章

转:C#中TransactionScope的使用方法和原理

在单个片段事务中添加多个返回堆栈条目

单个休眠会话中的多个事务(使用 Spring)

如何从 C# 中的单个完整路径创建多个目录?

分布式事务

C#中的泛型是啥意思?