采用事务执行多步操作报错 返回

SqlSugar 老数据
3 2541
该叫什么 ° ° 发布于2019/10/21
悬赏:5 飞吻

先上代码吧:

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 SugarBee VIP0
    2019/10/21

    代码确实存在问题,当连接超时,

    抛出 Exception 执行了 Ado.RollbackTran();

    但是 Ado.BeginTran(); 并没有执行过,

    因此显示 SqlTransaction has completed.

    0 回复
  • 一般情况Ado.BeginTran()放在try  的前面

    0 回复
  • 我的经验是,如果用事务就不要用异步,不然就是时不时的报:The connection does not support MultipleActiveResultSets.

    0 回复