System.Data.SqlClient.SqlException (0x80131904): EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数 = 1,当前计数 = 0。 EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数 = 1,当前计数 = 0。
2017-05-08 17:58
363 查看
EF使用ExecuteSqlCommand(db.Database.ExecuteSqlCommand("exec proc_DeleteCaseInfo_Output @caseID", new SqlParameter("@caseID", caseID));)来执行了一个包含了事务的存储过程,结果一直提示如题错误,找了很多文章也没有解决,不过有一篇文章给我了一些启发,参见:http://blog.csdn.net/tuzhen007/article/details/11183961,从此文中可知,如题错误是因为重复嵌套使用了事务,那么肯定是ExecuteSqlCommand函数调用了事务,通过浏览对象,见下图:
![](https://images2015.cnblogs.com/blog/600240/201705/600240-20170508174957879-774381373.png)
可知该函数还有一些重载(因为没有引用相关dll,该重载并没有提示出来,哭死),该参数有两个枚举,EnsureTransaction——如果不存在任何事务,则使用新事务进行操作;DoNotEnsureTransaction——如果存在现有事务,则使用它,否则在没有事务的情况下执行命令或查询。果然如此,该函数默认的调用了事务(原谅我的无知,高手请勿拍砖。。。。)。
问题找到了,解决思路也就有了,其一:使用该函数的事务,取消存储过程中的事务;其二:或者禁止该函数启用事务,在存储过程中使用事务。总之事务调用不要重复就好。折腾了大半天,总算解决了。
![](https://images2015.cnblogs.com/blog/600240/201705/600240-20170508174957879-774381373.png)
可知该函数还有一些重载(因为没有引用相关dll,该重载并没有提示出来,哭死),该参数有两个枚举,EnsureTransaction——如果不存在任何事务,则使用新事务进行操作;DoNotEnsureTransaction——如果存在现有事务,则使用它,否则在没有事务的情况下执行命令或查询。果然如此,该函数默认的调用了事务(原谅我的无知,高手请勿拍砖。。。。)。
问题找到了,解决思路也就有了,其一:使用该函数的事务,取消存储过程中的事务;其二:或者禁止该函数启用事务,在存储过程中使用事务。总之事务调用不要重复就好。折腾了大半天,总算解决了。
相关文章推荐
- 消息 266,级别 16,状态 2,过程 UserExchange,第 0 行 EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数 = 0,当前计数 = 1。
- EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数 = 0,当前计数 = 1。
- EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数 = 0,当前计数 = 1。
- EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配
- SqlServer中嵌套事务使用--事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配 --根本问题
- SqlServer中嵌套事务使用--事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配 --根本问题
- SqlServer中嵌套事务使用--事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配 --根本问题
- System.Data.SqlClient.SqlException (0x80131904): 查询已取消,因为此查询的估计开销(302)超出了配置的阈值 300
- sql server 2008 System.Data.SqlClient.SqlException (0x80131904): 查询处理器未能为执行并行查询启动必要的线程资源 处理方法
- SharePoint "System.Data.SqlClient.SqlException (0x80131904): Parameter '@someColumn' was supplied multiple times.“
- EXECUTE 后的事务计数指示缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句。上一计数 = 1,当前计数 = 2
- System.Data.SqlClient.SqlException (0x80131904): String or binary data would be truncated.
- System.Data.SqlClient.SqlException (0x80131904): Timeout 时间已到
- System.Data.SqlClient.SqlException: 将截断字符串或二进制数据。语句已终止
- 关于EXECUTE 后的事务计数指示缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句。上一计数
- EXECUTE 后的事务计数指出缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句。原计数 = 0,当前计数 = 1。
- EXECUTE 后的事务计数指示缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句
- EXECUTE后的事务计数指出缺少了COMMIT或ROLLBACK TRANSACTION语句。原计数=0,当前计数=1。
- EXECUTE 后的事务计数指示缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句
- System.Data.SqlClient.SqlException: 将截断字符串或二进制数据。语句已终止