代码之家  ›  专栏  ›  技术社区  ›  Michel

Microsoft.Practices.EnterpriseLibrary.Data:在一个事务中执行多个语句

  •  4
  • Michel  · 技术社区  · 15 年前

    我最近开始了一个现有的项目,它与微软公司。

    现在我想在一个事务中执行多个存储过程(1:n insert必须全部失败或成功)

    但我不知道怎么。。。。

    有人能帮我吗?

    在此项目中执行sp的典型代码如下所示:

    Database oDatabase = DatabaseFactory.CreateDatabase(CONNECTION_STRING_KEY);
    DbCommand oDbCommand = oDatabase.GetStoredProcCommand("upCustomer_Insert");
    
    Int32 iCustomerKey = 0;
    oDatabase.AddInParameter(oDbCommand, "Firstname", DbType.String, p_oCustomer.FirstName);
    oDatabase.AddInParameter(oDbCommand, "Lastname", DbType.String, p_oCustomer.LastName);
    
    oDatabase.ExecuteNonQuery(oDbCommand);
    
    3 回复  |  直到 15 年前
        1
  •  6
  •   RPM1984    15 年前

    你需要利用 数据库事务 :

    using (DbConnection connection = db.CreateConnection())
    {
        connection.Open();
        DbTransaction transaction = connection.BeginTransaction();
    
        try
        {
            db.ExecuteNonQuery(transaction, sp1);
            db.ExecuteNonQuery(transaction, sp2);
            transaction.Commit();
        }
        catch
        {
            transaction.Rollback();
            throw;
        }
    }
    

    注意第一个参数 执行查询 是要使用的事务。

    更多信息 here .

        2
  •  1
  •   Grwon    11 年前

    不过,事务作用域不是线程安全的。我读到的是,你不能将它用于多线程应用程序。这是一个真正的皮塔整体。MS似乎仍然不理解如何充分扩展软件系统。

        3
  •  0
  •   Shiraz Bhaiji    15 年前

    您可以将调用包装在transactionscope中,请参见: http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx