交易范围功能

时间:2011-10-26 11:43:39

标签: c# transactionscope

我使用以下代码来应用交易范围

TransactionOptions transOption = new TransactionOptions();
transOption.IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted;

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, transOption))
{
  //Code to delete    
  //Code to insert

  scope.Complete();
}

范围无效,如果我在插入中有错误,则删除记录未回滚

2 个答案:

答案 0 :(得分:1)

您需要告诉我们您使用的是哪个数据库服务器。如果您收到任何异常消息

无论如何代码看似正确,你检查了(MSDTC)吗?检查是否在您的操作系统上启用了它。

答案 1 :(得分:0)

http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.complete.aspx州:

TransactionScope.Complete()表示范围内的所有操作都已成功完成。

因此,除非您的“要插入的代码”抛出一个终止使用块的异常,否则您的代码始终会调用scope.Complete()并提交您的数据库更改。

如果您的“要删除的代码”和“要插入的代码”在内部处理异常,那么他们需要将信息返回到您的使用块以指示是否有效。例如,假设您的“代码”块是方法调用,如果所有好或假如果失败则返回true,您可以写:

bool allGood;

allGood = CodeToDelete();

if(allGood)
{
  allGood = CodeToInsert();
}

if(allGood)
{
  scope.Complete();
}
相关问题