Boa Tarde Pessoal,
Estou necessitando fazer uma inserção de dados ao mesmo tempo num banco mysql e outro sql server 2000. Estou usando o transactionscope para realizar o controle da transação, mas sempre dá erro informando que o mysql não dá suporte para tal procedimento. Será se alguém poderia me ajudar?
Uso a versão 5 do mysql server e o mysql connector 6.0.2.
Segue abaixo o método que estou provendo
//Realiza a atualização implícita em ambos SGBDs
private static bool InserirDados(string DescricaoLogradouro)
{
//Caso não ocorra nenhum problema, retornará true
bool atualizouDados = true;
try
{
//Update único aos SGBDs MySql e SqlServer
string cmdText = "insert tbTiposLogradouro(sTipoLogradouroID,sDescricao) values( '" +
Guid.NewGuid().ToString() + "', '" + DescricaoLogradouro + "')";
//TransactionScope: mantém a atomicidade das transações efetuadas internamente ao using
using (TransactionScope trans = new TransactionScope())
{
using (SqlConnection sqlConn = new SqlConnection(connSqlServer))
{
//Neste momento trata-se de uma transação local
sqlConn.Open();
SqlCommand cmdSqlServer = new SqlCommand(cmdText, sqlConn);
cmdSqlServer.ExecuteNonQuery();
//Aninhando a conexão ao MySql dentro do SqlServer permite a otimização de recursos
using (MySqlConnection mySqlConn = new MySqlConnection(connMysql))
{
//Neste momento a transação é promovida ao MSDTC
mySqlConn.Open();
MySqlCommand cmd2000 = new MySqlCommand(cmdText, mySqlConn);
cmd2000.ExecuteNonQuery();
}
}
//Testa se deve disparar uma exceção "forçada”, para testes
if (false)
throw new Exception(".NET Magazine: Transações com .NET 2.0");
//Finaliza o TransactionScope, realizando o commit em ambos SGBDs
trans.Complete();
}
}
//Ocorrendo algum erro, retorna false, exibindo a mensagem de erro
catch (Exception ex)
{
atualizouDados = false;
Console.Write("Ocorreu um erro: " + ex.Message, ".NET Magazine - Transactions");
}
return atualizouDados;
}
Henrylle Maia - Desenvolvedor .NET