oledb / ado.net: obtenga el texto del comando, con todos los parámetros reemplazados
-
05-07-2019 - |
Pregunta
¿Es posible obtener el texto de un OleDbCommand
con todos los parámetros reemplazados con sus valores? P.ej. en el código a continuación, estoy buscando una manera de obtener el texto de consulta
SELECT * FROM my_table WHERE c1 = 'hello' and c2 = 'world'
después de que termine de asignar los 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";
Solución
No: tienes que recorrer la colección de parámetros tú mismo, haciendo una cadena. Reemplazar () para obtener el equivalente. Es particularmente doloroso cuando tienes que usar la sintaxis ?
en lugar de la sintaxis @parametername
.
El motivo de esto es que la cadena completa está nunca ensamblada. Los parámetros se envían al servidor y se tratan como datos, y nunca se incluyen en la cadena.
De todos modos, por mi parte, entiendo tu dolor. Hubiera sido bueno si incluyeran algún tipo de método .ComposeSQL ()
que podría llamar para propósitos de depuración , que quizás también produzca una advertencia del compilador para ayudar a evitar el uso en la producción. .
Otros consejos
Si solo necesita ver qué consulta se ejecutó y no necesita trabajar con ella programáticamente, puede usar el Analizador de SQL.