0

我正在做一个项目,我需要将旧数据从生产服务器传输到存档服务器。如果在传输过程中出现任何故障,我在处理跨服务器的数据一致性时会遇到问题。只不过是执行交易而已。

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

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

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

4

2 回答 2

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   
于 2012-08-08T07:45:34.263 回答
0

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

(首先参考 System.Transactions-namespace)

    System.Transactions

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

            transaction.Complete();
        }
        catch(Exception)
        {
            transaction.Dispose();
        }
    }
于 2012-08-08T06:49:28.063 回答