oledb / ado.net: obtenga el texto del comando, con todos los parámetros reemplazados

StackOverflow https://stackoverflow.com/questions/178857

  •  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";
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top