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——如果存在現有事務,則使用它,否則在沒有事務的情況下執行命令或查詢。果然如此,該函數默認的調用了事務(原諒我的無知,高手請勿拍磚。。。。)。

問題找到了,解決思路也就有了,其一:使用該函數的事務,取消存儲過程中的事務;其二:或者禁止該函數啟用事務,在存儲過程中使用事務。總之事務調用不要重復就好。折騰了大半天,總算解決了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM