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

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——如果存在现有事务,则使用它,否则在没有事务的情况下执行命令或查询。果然如此,该函数默认的调用了事务(原谅我的无知,高手请勿拍砖。。。。)。

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

 

转载于:https://www.cnblogs.com/zinan/p/6826288.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值