在存储过程中回滚与在C#代码中回滚
本文关键字:代码 存储过程 存储 过程中 | 更新日期: 2023-09-27 18:28:22
我有一个过程Proc1,它调用另一个过程Proc2,并且两者都带有"BEGIN TRANSCTION"如果我在第二个过程中遇到错误,它将回滚这两个过程。好啊
但在我的C#代码中,我也有这个
...
dbCommand.Transaction.Commit();
dbCnn.Close();
}
catch (Exception ex)
{
if (dbCommand.Transaction != null)
**dbCommand.Transaction.Rollback();**
if (dbCnn.State == ConnectionState.Open)
dbCnn.Close();
throw ex;
}
"dbCommand.Transaction.Rollback();"知道我说的是哪个事务吗?如果我让两个事务执行相同的过程,没有标签,那么C#回滚正确的事务会有问题吗?
"dbCommand.Transaction.Rollback();"是否知道我是哪个事务谈论?
没有。它也不在乎。它回滚在连接级别包装所有内容的事务。里面的一切都是交易的一部分。
如果我有两个交易吃相同的程序,没有标签,C#回滚正确的事务会有问题吗?
不能有两个交易。事务形成一个层次结构。上面的代码回滚了整个顶级连接级别事务。您在sstored过程中打开的每一个其他事务都是该事务的一部分。
由于您在C#代码中定义了Transaction,因此不需要在SQL代码中添加Transaction。如果将由C#事务处理的SQL代码中出现任何错误,则回滚,否则提交。