采用事务执行多步操作报错 返回
先上代码吧:
var res = new ApiResult<string>
{
statusCode = 200,
data = "1"
};
List<Ath_CompanyAth_Menu> list = new List<Ath_CompanyAth_Menu>();
foreach (var item in menuList)
{
list.Add(new Ath_CompanyAth_Menu()
{
Ath_Company_Id = companyId,
Ath_Menu_Id = item
});
}
try
{
athDb.Ado.BeginTran();
//操作
var t4 = athDb.Deleteable<Ath_CompanyAth_Menu>().In(it => it.Ath_Company_Id, menuList).ExecuteCommand();
//添加新的授权菜单
if (list.Count > 0)
{
athDb.Insertable(list).ExecuteCommandAsync();
}
athDb.Ado.CommitTran();
}
catch (Exception ex)
{
athDb.Ado.RollbackTran();
res.message = ApiEnum.Error.GetEnumText() + ex.Message;
Logger.Default.ProcessError((int)ApiEnum.Error, ex.Message);
return res;
}
1、一开始报了个错:The connection does not support MultipleActiveResultSets.,我看是多重连接的问题,于是在连接字符串里加上MultipleActiveResultSets=true,但是好像还是有概率提示这个问题,看操作频率吧,只是成功的概率高了。
2、我问题貌似解决后,再执行,报了第二个错:This SqlTransaction has completed; it is no longer usable,这个也是概率报错,我不是很了解数据库连接这些问题,想求助下,是我的代码写的有问题吗
热忱回答(3)
-
SugarBee VIP0
2019/10/21代码确实存在问题,当连接超时,
抛出 Exception 执行了 Ado.RollbackTran();
但是 Ado.BeginTran(); 并没有执行过,
因此显示 SqlTransaction has completed.
0 回复 -
道法自然 VIP0
2019/10/24一般情况Ado.BeginTran()放在try 的前面
0 回复 -
地狱人形师 VIP0
2020/6/17我的经验是,如果用事务就不要用异步,不然就是时不时的报:The connection does not support MultipleActiveResultSets.
0 回复