C# 回滚C中的临时数据库更改#
我有一个看似简单的问题,但一直在网上搜索,却找不到解决办法 问题/要求: 在我的c#方法中C# 回滚C中的临时数据库更改#,c#,sql-server,transactions,sql-server-2012,C#,Sql Server,Transactions,Sql Server 2012,我有一个看似简单的问题,但一直在网上搜索,却找不到解决办法 问题/要求: 在我的c#方法中 我想开始一笔交易 调用一些业务逻辑,最终用复杂的逻辑更新数据库。(由其他人编写) 检查数据库中的更新数据 无条件/强制回滚步骤2中完成的更改(即使更改在业务逻辑中提交) 我尝试使用System.Transactions.TransactionScope,但它无法按需强制回滚更改。(调用.Dispose时不会回滚更改)如果事务已提交,则已提交。之后就没有退路了。这就是提交的重点。您最终将不得不更改外部代码。
我尝试使用
System.Transactions.TransactionScope
,但它无法按需强制回滚更改。(调用.Dispose
时不会回滚更改)如果事务已提交,则已提交。之后就没有退路了。这就是提交的重点。您最终将不得不更改外部代码。如果“某些业务逻辑”不是您自己的DB调用(即连接库中的某些方法),则您无法回滚更改(如果该逻辑的开发人员不提供这种可能性)
但是,如果该逻辑只是一些DB调用,那么您可以在不提交的情况下回滚事务
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
// Start a local transaction.
SqlTransaction sqlTran = connection.BeginTransaction();
// Enlist a command in the current transaction.
SqlCommand command = connection.CreateCommand();
command.Transaction = sqlTran;
try
{
// Here is your "business logic"
command.CommandText = "INSERT INTO tbBusinessLogic VALUES(1)";
command.ExecuteNonQuery();
// Check result
command.CommandText = "Select 1 from tbBusinessLogic";
var result = (Int32)command.ExecuteScalar();
CheckResult(result);
// Rollback the transaction.
sqlTran.Rollback();
}
catch (Exception ex)
{
Logger.LogError(ex);
sqlTran.Rollback();
}
}
调用事务作用域上的
Dispose
?我尝试使用也许您应该询问如何修复使用该类时所犯的错误?显然,如果使用正确,TransactionScope能够回滚某些内容。