PREPARE STATEMENT
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:
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 ?
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 ?
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 ?
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 ?
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.
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