在C#.net中跨SQL Server处理事务的最佳方法是什么?

时间:2012-08-08 06:35:35

标签: c# sql-server sql-server-2008

我正在开发一个项目,我需要将旧数据从生产服务器传输到存档服务器。如果在传输过程中出现任何故障,我在处理服务器之间的数据一致性时遇到问题。这只是实施交易。

每当数据传输过程中出现系统故障时,进程应该从归档服务器中删除所有传输的记录,并在系统恢复时将整个传输过程重新启动。

注意:由于我的客户所在地的某些权限/设置原因,我无法使用分布式事务。

有没有办法在C#.net或SQL Server 2008中处理这个问题?

2 个答案:

答案 0 :(得分:0)

以下代码用于在整个事务的任何部分失败时编辑数据库之前“回滚”到。您可以尝试修改它以满足您的需求。

(首先引用System.Transactions-namespace)

    System.Transactions

    using(TransactionScope transaction = new TransactionScope())
    {
        try
        {
            //modify your database here

            transaction.Complete();
        }
        catch(Exception)
        {
            transaction.Dispose();
        }
    }

答案 1 :(得分:0)

    DECLARE  @TranCounter INT; 

    SET @TranCounter = @@TRANCOUNT; 

    IF @TranCounter > 0 
      SAVE TRANSACTION savepointrb1; 
    ELSE 
      BEGIN TRANSACTION; 

   BEGIN TRY

       -- your code will be here. if you are using multiple stored procedures then                
          apply this code on that

       IF @TranCounter = 0 
        COMMIT TRANSACTION;     

    END TRY 

    BEGIN CATCH 
      IF @TranCounter = 0 
        ROLLBACK TRANSACTION; 
      ELSE 
        IF Xact_state() <> -1 
          ROLLBACK TRANSACTION savepointrb1; 

        END CATCH