我有一个程序Proc1调用另一个程序Proc2,并且都有" BEGIN TRANSCTION" 如果我在第二个过程中收到错误,它将回滚这两个过程。 OK!
但在我的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#回滚正确的事务会有问题吗?
答案 0 :(得分:2)
" dbCommand.Transaction.Rollback();"知道我是哪个交易 在说什么?
没有。它也不关心。它回滚在连接级别上包装所有内容的事务。内部的一切都是这笔交易的一部分。
如果我有两个交易吃了相同的程序,没有标签, C#回滚正确的事务会有问题吗?
您不能拥有两笔交易。交易形成层次结构。上面的代码回滚了整个顶级连接级事务。您在sstored过程中打开的每个其他事务都是此事务的一部分。
答案 1 :(得分:1)
在C#代码中定义Transaction时,不需要在SQL Code中添加Transaction。如果SQL代码中出现任何错误,将由C#Transaction处理,否则回滚将提交。