2012-08-08 102 views
0

我正在處理一個需要將舊數據從生產服務器傳輸到存檔服務器的項目。在這裏,如果在傳輸過程中出現任何故障,我在處理服務器間數據一致性時遇到問題。這只是實現交易。在C#.net中處理跨SQL Server的事務的最佳方式是什麼?

每當數據傳輸過程中出現系統故障時,進程應從歸檔服務器中刪除所有傳輸的記錄,並在系統回來時啓動整個傳輸過程。

注意:由於某些權限/設置原因,我無法使用分佈式事務來實現客戶端場所。

有什麼辦法可以在C#.net或SQL Server 2008中處理?

+0

你能解釋一下爲什麼你需要做到這一點使用C#?使用SQL Server功能;這是更快,更少的工作。 – 2012-08-08 06:37:21

+0

SQL服務器對我來說也很好。但是如何在服務器之間使用sql server來實現這個呢? – AnandPhadke 2012-08-08 06:38:04

+0

使用http://en.wikipedia.org/wiki/SQL_Server_Integration_Services – 2012-08-08 06:38:56

回答

0

當整個事務的任何部分失敗時,以下代碼用於'回滾'到編輯數據庫之前。您可以嘗試對其進行修改以滿足您的需求。

(第一參考System.Transactions的命名空間)

System.Transactions 

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

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

會在服務器上處理嗎? – AnandPhadke 2012-08-08 06:58:29

+0

我真的不知道。我想我會把它留給你找出來。請讓我知道如果工作與否。 – user1582511 2012-08-08 19:56:40

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 
相關問題