PREPARE STATEMENT

RODRIGUESRM 29/09/2011 09:48:08
#385523
Pessoal, vou tentar explicar a minha necessidade.

Trabalho em uma empresa que tem um sistema para automação comercial (varejo) e um dos pontos forte é o nosso mecanismo de integração das lojas com uma central (bases de dados MySQL 5). A essência de funcionamento é que toda Instrução SQL executada nas lojas são gravadas (a Instrução SQL é gravada/logada) em um banco separado e uma aplicação que roda em background executa essas instruções na central, com isto temos neste servidor central todos os dados das N lojas que o cliente possua, esse mecanismo funciona bem, mas nossa aplicação está rodando em VB6 e estamos começando a migrar para .NET utilizando técnicas de [Ô]Prepare Statement[Ô] no entanto para obter o mesmo resultado que tenho hoje preciso ter em mãos as instrução SQL que foi executada (depois de preparada), veja o exemplo:

no código abaixo:



using (MySqlConnection conn = new MySqlConnection())
{

MySqlParameter parametro;

conn.ConnectionString = [Ô]Server=127.0.0.1;Port=3306;Database=myDB;Uid=root;Pwd=*****;[Ô];
conn.Open();

//Preparando o comando
MySqlCommand comando = new MySqlCommand([Ô]INSERT INTO contato (nome, nascimento, salario, Obs) VALUES (?nome, ?nascimento, ?salario, ?obs)[Ô], conn);

//nome
parametro = new MySqlParameter([Ô]?nome[Ô], MySqlDbType.VarChar);
parametro.Value = [Ô]JOANA D[ô]ARC[Ô];
comando.Parameters.Add(parametro);

//nascimento
parametro = new MySqlParameter([Ô]?nascimento[Ô], MySqlDbType.Date);
parametro.Value = [Ô]10/11/1976[Ô];
comando.Parameters.Add(parametro);

//salario
parametro = new MySqlParameter([Ô]?salario[Ô], MySqlDbType.Double);
parametro.Value = 1234.56;
comando.Parameters.Add(parametro);

//obs
parametro = new MySqlParameter([Ô]?obs[Ô], MySqlDbType.VarChar);
parametro.Value = @[Ô]Você pode digita arqui o que você quiser... \(!@#$%¨[ô]&*()_+{'^}?:><[Ô];
comando.Parameters.Add(parametro);

comando.Prepare();

comando.ExecuteNonQuery();

conn.Close();

}



quando o comando de ExecuteNonQuery é executado, a instrução SQL [Ô]INSERT INTO contato (nome, nascimento, salario, Obs) VALUES (?nome, ?nascimento, ?salario, ?obs)[Ô] é executada da seguinte forma:

INSERT INTO contato (nome, nascimento, salario, Obs) VALUES ([ô]JOANA D\[ô]ARC[ô], [ô]1976-11-10[ô], 1234.56, [ô]Você pode digita arqui o que você quiser... \(!@#$%¨\[ô]&*()_+{'^}?:><[ô])

Até aqui tudo bem, o problema é que eu preciso de alguma propriedade o método que me devolva a instrução já preparada.

PS: Utilizo MySQL com conexão através do ADO.NET Driver for MySQL (Connector/NET).

Alguém sabe como fazê-lo ?
RODRIGUESRM 29/09/2011 10:31:56
#385530
OCELOT,

Compreendi a sua explanação, contudo ainda continuo com o mesmo problema, ou seja, se eu não executar o .Prepare o comando executa da mesma forma, até aí, sem problemas, mas o que eu preciso é capturar a instrução SQL que foi executada após o comando .ExecuteNonQuery(), como faço isto ?
RODRIGUESRM 29/09/2011 15:13:43
#385550
OCELOT,

Cara, obrigado pelas informações, e também pela DICA, acabei resolvendo a questão com base na sua sugestão, estou gravando em uma tabela o SQL com as variáveis (?xxxx) e em outro o conteúdo dos parametros.

Muito obrigado.
Tópico encerrado , respostas não são mais permitidas