Pergunta

É possível obter o texto de um OleDbCommand com todos os parâmetros substituídos por seus valores? Por exemplo. no código abaixo eu estou procurando uma maneira de obter o texto da consulta

SELECT * FROM my_table WHERE c1 = 'hello' and c2 = 'world'

depois que eu terminar de atribuir os parâmetros.

var query = "SELECT * FROM my_table WHERE c1 = ? and c2 = ?";
var cmd = new OleDbCommand(query, connection);
cmd.Parameters.Add("@p1", OleDbType.WChar).Value = "hello";
cmd.Parameters.Add("@p2", OleDbType.WChar).Value = "world";
Foi útil?

Solução

Não: você tem que percorrer a coleção de parâmetros mesmo, fazendo um String.Replace () para obter o equivalente. É particularmente doloroso quando você tem que usar a sintaxe ? em vez da sintaxe @parametername.

A razão para isto é que a cadeia completa é não montado. Os parâmetros e enviado para o servidor e tratados como dados, e nunca são incluídos na string.

Ao mesmo tempo, eu, pelo menos entender a sua dor. Teria sido bom se eles incluíram algum tipo de método .ComposeSQL() você poderia chamar para fins de depuração , que talvez também produz um aviso do compilador para uso ajudam a evitar na produção.

Outras dicas

Se você só precisa ver o que consulta foi executada e necessidade não faça o trabalho com ele por meio de programação, você pode usar SQL Profiler.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top