c# - 当我停止调试器时,C# TransactionScope 不回滚
问题描述
我在我的控制器、ASP Net 4.6 和 SQL Server 2014 的运行时中有这个简单的代码可以正常工作,但是当在调试模式下运行(逐步)并且我在事务范围的中间停止进程时,数据库中的更改被提交. 怎么可能?
void RootMethod()
{
using (TransactionScope scope = new TransactionScope())
{
DoSql("Update myTable Set " +
"MyField = 'value' " +
"Where " +
"Id = 'test');
//stop here
Console.WriteLine("OK");
DoSql("Update myTable Set " +
"MyField = 'secondValue' " +
"Where " +
"Id = 'test');
scope.Complete();
}
}
代码被简化以最小化复杂性以及 SQL 语句。“DoSql”函数是一个助手,代码如下:
public static void DoSql(string cCmdSql)
{
string connStr = "uid=userdb;pwd=xxxxxx;server=MyServer;database=MyDatabase;Application Name=\"WebApp\";
using (SqlConnection conn = new SqlConnection(connStr))
{
try
{
conn.Open();
SqlCommand selectCmd = new SqlCommand(cCmdSql, conn);
SqlDataAdapter oAda = new SqlDataAdapter();
oAda.SelectCommand = selectCmd;
oAda.SelectCommand.CommandTimeout = 300;
DataSet oDs = new DataSet();
oAda.Fill(oDs);
}
catch (SqlException ex)
{
Console.WriteLine("SQL: " + cCmdSql + ex.Message);
throw;
}
}
return;
}
当我在事务中间调试进程并且我必须停止它以更正它时,我需要事务进行回滚而它没有。
但是在运行时,如果我放了一个 Transaction.Current.Rollback() 或者 sql 语句失败,事务就会回滚。
解决方案
谢谢大家。
没错,MSDTC 服务已停止,我刚刚启动并按预期工作。
我认为,那样的话,框架应该会抛出异常,但是知识就是力量,下次我会尽量不要在这上面花那么多时间。
谢谢。
推荐阅读
- javascript - 出现“未捕获的 TypeError:history.push 不是函数”错误
- reactjs - 尝试使用 Microsoft Graph API + react-adal 获取用户个人资料照片时出现“NoPermissionsInAccessToken”
- python - Power Shell 中未激活 Conda
- javascript - jQuery滚动到元素然后单击它
- scala - 向 Spark 数据框添加其他列
- ios - 在子 ViewController 之间转换期间停止 TabBar 动画
- laravel - 在 laravel InfyOm 中设置随机字符串变量
- elasticsearch - 如何在 Elastic Cloud Enterprise 中拍摄特定索引的快照?
- database - 有什么方法可以参数化 mule 4 中 SQL 查询中提供的表名
- kendo-ui - 剑道日期选择器只选择今天起