我使用以下代码来应用交易范围
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();
}
范围无效,如果我在插入中有错误,则删除记录未回滚
答案 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();
}