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

时间:2010-11-19 08:40:21

标签: c# ado.net enterprise-library

我最近开始使用现有项目,它可以与Microsoft.Practices.EnterpriseLibrary.Data对象一起使用。

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

但我不知道如何......

任何人都可以帮助我吗?

在此项目中执行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 个答案:

答案 0 :(得分:6)

您需要使用 DbTransaction

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;
    }
}

注意 ExecuteNonQuery 的第一个参数是如何使用的事务。

更多信息here

答案 1 :(得分:1)

但事务范围不是线程安全的。你不能将它用于多线程应用程序就是我所读过的。这是一个真正的PITA整体。 MS似乎还不了解如何充分扩展软件系统。

答案 2 :(得分:0)

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