Usuário com melhor resposta
Como vincular a mesma transação para dois BDs diferentes ?

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
Respostas
-
Blz pessoal...
Achei uma solução!
Veja lá: http://social.msdn.microsoft.com/Forums/pt-BR/504/thread/7a01bb8a-44f6-4e33-99b4-23122dc665da
Só que tem que Iniciar o serviço "Coordenador de Transações Distribuidas" do Windows.
Valeu!
Abraços
André
André P. Bertoletti- Marcado como Resposta André P. Bertoletti quarta-feira, 25 de fevereiro de 2009 14:17
Todas as Respostas
-
Olá André, eu faria da seguinte forma:
Iria criar um método passando passando para eles os parametros necessários para execução, dentro deste método iria definir a connectionString correta, ficando ele como método filho.
Dentro do seu método principal eu colocaria a chamada para este método passando os parâmetros recebidos do método pai.
Duvidas, poste ai.
Nelson Borges - Analista de Sistemas -
Blz pessoal...
Achei uma solução!
Veja lá: http://social.msdn.microsoft.com/Forums/pt-BR/504/thread/7a01bb8a-44f6-4e33-99b4-23122dc665da
Só que tem que Iniciar o serviço "Coordenador de Transações Distribuidas" do Windows.
Valeu!
Abraços
André
André P. Bertoletti- Marcado como Resposta André P. Bertoletti quarta-feira, 25 de fevereiro de 2009 14:17