2012-08-08 3 views
0

프로덕션 서버에서 보관 서버로 이전 데이터를 전송해야하는 프로젝트에서 작업하고 있습니다. 여기에 전송 중 오류가 발생하면 서버간에 데이터 일관성을 처리하는 데 문제가 있습니다. 트랜잭션을 구현하는 것만이 아닙니다.C# .net의 SQL Server에서 트랜잭션을 처리하는 가장 좋은 방법은 무엇입니까?

데이터 전송 중에 시스템 오류가 발생할 때마다 프로세스는 보관 서버에서 전송 된 모든 레코드를 삭제하고 시스템이 돌아 왔을 때 전체 전송 프로세스를 새로 시작해야합니다.

참고 : 클라이언트의 구내에서 일부 사용 권한/설정 이유로 인해 분산 된 트랜잭션을 사용할 수 없습니다.

C# .net 또는 SQL Server 2008에서이 문제를 해결할 방법이 있습니까?

+0

당신이 설명 할 수 있을까요? SQL Server 기능을 사용하십시오. 그것은 빠르고 작업이 적습니다. –

+0

SQL 서버도 me.But 서버를 통해 SQL 서버를 사용하여 이것을 달성하기 위해 괜찮습니까? – AnandPhadke

+0

http://en.wikipedia.org/wiki/SQL_Server_Integration_Services –

답변

0

다음 코드는 전체 트랜잭션의 일부가 실패 할 때 데이터베이스를 편집하기 전에 '롤백'하는 데 사용됩니다. 당신은 그것을 당신의 요구에 맞도록 수정하려고 할 수 있습니다.

(먼저 참조하는 System.Transactions를-네임 스페이스)이 사용하는 C# .NET을해야 할 이유

System.Transactions 

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

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

이 서버에서 처리됩니까? – AnandPhadke

+0

솔직히 모르겠습니다. 알아 내야겠다고 생각했습니다. 작동하는지 여부를 알려주십시오. – user1582511

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 
관련 문제