C# 回滚事务
我有下一个代码:C# 回滚事务,c#,sql-server,entity-framework,tsql,ef-code-first,C#,Sql Server,Entity Framework,Tsql,Ef Code First,我有下一个代码: C# Database.ExecuteSqlCommand("sp_myProc") SQL procedure sp_myProc begin try begin tran insert.... delete.... commit tran end try begin catch goto error; end catch
C#
Database.ExecuteSqlCommand("sp_myProc")
SQL
procedure sp_myProc
begin try
begin tran
insert....
delete....
commit tran
end try
begin catch
goto error;
end catch
error:
if @@trancount > 0
rollback tran
由于ExecuteSqlCommand
还打开了一个mient事务和@@trancount
出现错误时,回滚所有事务,包括来自ExecuteSqlCommand
。EF生成错误:
“执行后的事务计数表示提交或回滚
“缺少事务语句”
我的问题1:我对当前错误的理解正确吗
my
问题2:如果我将存储过程sp_myProc更改为如下视图:
set xact abort on;
begin tran
insert....
delete....
commit tran
我可以有哪些警告或错误?除了启用XACT\U ABORT,还可以将条件回滚移到catch块。它不起作用-raise error“Message=”执行后的事务计数表示缺少COMMIT或rollback事务语句。上一次计数=1,当前计数=0。“看起来ExecuteSqlCommand为您启动了一个事务。事务处理应该由客户机或在proc中完成,但不能同时由客户机和proc完成。否则,进程中的回滚也将回滚客户端事务。是的,内部的ExecuteSqlCommand启动事务。我的问题是:如果我应用代码的第二个版本,我会有任何警告吗?使用ExecuteSqlCommand调用的proc中的任何事务处理的警告是,在回滚之后,您将得到tran count错误。那么,为什么进程中会有任何异常呢?除了将XACT_ABORT设置为ON,还将条件回滚移动到catch块。它不起作用-raise error“Message=”Transaction count after EXECUTE指示缺少COMMIT或rollback Transaction语句。上一次计数=1,当前计数=0。“看起来ExecuteSqlCommand为您启动了一个事务。事务处理应该由客户机或在proc中完成,但不能同时由客户机和proc完成。否则,进程中的回滚也将回滚客户端事务。是的,内部的ExecuteSqlCommand启动事务。我的问题是:如果我应用代码的第二个版本,我会有任何警告吗?使用ExecuteSqlCommand调用的proc中的任何事务处理的警告是,在回滚之后,您将得到tran count错误。那么,为什么程序中会有任何错误呢?