none
Como vincular a mesma transação para dois BDs diferentes ? RRS feed

  • Pergunta

  •  Olá pessoal, tudo bem?

    Tenho um programa em C#, acessando o SQL 2005 e estou utilizando o SqlTransaction para criar uma transação que cerque alguns comandos disparados no banco.

    Vejam o código:

    public void GravaDados()  
    {  
         /// Abre a conexao e associa uma transacao de banco de dados a ela.  
         cnn.Open();  
         System.Data.SqlClient.SqlTransaction pTransDB = cnn.BeginTransaction(System.Data.IsolationLevel.ReadCommitted);  
                  
         try  
         {  
               ExecutaComando01_BD_A(pTransDB);  
               ExecutaComando02_BD_A(pTransDB);  
               ExecutaComando03_BD_A(pTransDB);  
     
               pTransDB.Commit();  
               cnn.Close();  
               cnn.Dispose();  
     
         }  
         catch (Exception e)  
         {  
               pTransDB.Rollback();  
               cnn.Close();  
               cnn.Dispose();  
               /// Lança a Excecao para ser tratada pelo ExceptionHandler  
               throw e;  
         }  


    Porém, agora surgir a necessidade de executar um novo comando, só que disparado para um BD diferente. E é ai que surge a duvida:

    Como vincular a mesma transação para dois BDs diferentes ?

    public void GravaDados()     
    {     
         /// Abre a conexao e associa uma transacao de banco de dados a ela.     
         cnn.Open();     
         System.Data.SqlClient.SqlTransaction pTransDB = cnn.BeginTransaction(System.Data.IsolationLevel.ReadCommitted);     
                     
         try     
         {     
               ExecutaComando01_BD_A(pTransDB);     
               ExecutaComando02_BD_A(pTransDB);     
               ExecutaComando03_BD_A(pTransDB);     
     
               /// ?????????????????????????????????????  
               ///Aqui está a duvida: qual transacao passar por parametro???????????  
               /// ?????????????????????????????????????  
               ExecutaComando04_BD_B(pTransDB);     
        
               pTransDB.Commit();     
               cnn.Close();     
               cnn.Dispose();     
        
         }     
         catch (Exception e)     
         {     
               pTransDB.Rollback();     
               cnn.Close();     
               cnn.Dispose();     
               /// Lança a Excecao para ser tratada pelo ExceptionHandler     
               throw e;     
         }     
    }    
     
     

    Muito obrigado pessoal.

    Abraços

    André

    André P. Bertoletti
    sexta-feira, 20 de fevereiro de 2009 21:14

Respostas

Todas as Respostas