oledb / ado.net: obter o texto do comando, com todos os parâmetros substituídos
-
05-07-2019 - |
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 ??p>
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";
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.