• System.Data.SqlClient.SqlException (0x80131904): EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数 = 1,当前计数 = 0。 EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数 = 1,当前计数 = 0。


    EF使用ExecuteSqlCommand(db.Database.ExecuteSqlCommand("exec proc_DeleteCaseInfo_Output @caseID", new SqlParameter("@caseID", caseID));)来执行了一个包含了事务的存储过程,结果一直提示如题错误,找了很多文章也没有解决,不过有一篇文章给我了一些启发,参见:http://blog.csdn.net/tuzhen007/article/details/11183961,从此文中可知,如题错误是因为重复嵌套使用了事务,那么肯定是ExecuteSqlCommand函数调用了事务,通过浏览对象,见下图:

    可知该函数还有一些重载(因为没有引用相关dll,该重载并没有提示出来,哭死),该参数有两个枚举,EnsureTransaction——如果不存在任何事务,则使用新事务进行操作;DoNotEnsureTransaction——如果存在现有事务,则使用它,否则在没有事务的情况下执行命令或查询。果然如此,该函数默认的调用了事务(原谅我的无知,高手请勿拍砖。。。。)。

    问题找到了,解决思路也就有了,其一:使用该函数的事务,取消存储过程中的事务;其二:或者禁止该函数启用事务,在存储过程中使用事务。总之事务调用不要重复就好。折腾了大半天,总算解决了。

  • 相关阅读:
    hive之窗口函数
    linux环境下Mysql的卸载和重新安装和启动
    2017ACM暑期多校联合训练
    2017ACM暑期多校联合训练
    状态压缩dp
    铺砖问题 (状态压缩dp)
    POj 2104 K-th Number (分桶法+线段树)
    POJ 2991 Crane (线段树)
    4 Values whose Sum is 0 POJ 2785 (折半枚举)
    Billboard HDU 2795 (线段树)
  • 原文地址:https://www.cnblogs.com/zinan/p/6826288.html
Copyright © 2020-2023  润新知