代码之家  ›  专栏  ›  技术社区  ›  Russell

SQL中事务的独立提交

  •  2
  • Russell  · 技术社区  · 15 年前

    我有一个n层C#ASP.Net应用服务器,它使用存储过程与数据库通信。

    在我的存储过程中,我希望跟踪登录尝试次数,因此我们希望保持事务框架的原样,但希望有一个我们提交的独立事务。

    我该怎么做?

    我尝试在数据层中使用新的TransactionScope.RequiresNew,但没有效果。

    1 回复  |  直到 15 年前
        1
  •  0
  •   StuartLC    15 年前

    奇怪-内部(日志记录)事务范围中的RequiresNew应该可以工作。

        try
        {
            using (TransactionScope tsOuter = new TransactionScope(TransactionScopeOption.Required))
            {
                DAL1.Txn1();
                using (TransactionScope tsLogging = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    DAL2.Txn2();
                    tsLogging.Complete();
                }
                throw new Exception("Big Hairy Exception");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    

    http://msdn.microsoft.com/en-us/library/ms973865.aspx ,引用如下

    TransactionScope非常智能地管理事务升级—它们将使用(例如,只有在事务跨越多个数据库或资源时才会使用DTC—例如SQL和MSMQ)。它们还与sql2005+轻量级事务一起工作,因此到同一数据库的多个连接也将在一个事务中进行管理,而不会产生DTC的开销。

    应用程序不应直接 利用事务编程 提交事务谓词,或 中的MessageQueueTransaction()对象 System.Messaging命名空间,何时 处理MSMQ。这些机制 交易管理经办人 系统事务,并结合 系统事务的使用 交易会导致不一致