2011-10-27 14 views
8

¿Hay alguna manera de acceder al CommandText justo después de que se ejecuta? Tengo el siguiente código:visualización exacta sql después de la sustitución de parámetros C#

cmd = new OracleCommand(sql.ToString(), conn); 
cmd.Parameters.Add(new OracleParameter("@parm", parmValue)); 


OracleDataAdapter da = new OracleDataAdapter(cmd); 
DataTable dt = new DataTable(); 
da.Fill(dt); 

Lo que necesito saber es la cadena de comandos SQL ejecutadas en la base de datos que ya tiene el valor de parmValue contenida en el SQL. En otras palabras, no debo poder ver la cadena "@parm" dentro de la consulta, sino el valor de la misma.

Necesito esto para poder insertar este sql en una base de datos de registro para referencia futura.

Gracias de antemano.

+2

Incluso cuando se envía realmente al servidor sql, se parametriza; las variables se declaran y luego se usan dentro de la consulta. –

+1

posible duplicado de [¿Cómo obtener el SQL-Statement generado a partir de un SqlCommand-Object?] (Http://stackoverflow.com/questions/265192/how-to-get-the-generated-sql-statement-from-a -sqlcommand-object) –

+0

¡Maldición! Esa fue mi respuesta! Encontraste a la víctima mientras escribía la mía. – David

Respuesta

1

No estoy seguro acerca de Oracle, pero en el RDBMS con el que trabajo personalmente esto no se puede hacer.

Cuando necesité obtener los parámetros y ver la consulta SQL resultante, siempre lo hice al recorrer la colección de parámetros en el código y extraer los pares Nombre/Valor para registrar la consulta resultante o algo así en nuestra base de datos de registro de errores:

StoredProc = InsertCallRecord: Parámetros: CallId = 1234; custID = 651; PersonCalling = a Dave ...

sólo hacer esto en el registro de errores porque es una actuación arrastre para hacerlo en cada llamada, pero también podría funcionar en un escenario de prueba .

2

No estoy seguro de si Oracle funciona exactamente de esta manera, pero para la mayoría de los demás proveedores de DB, una consulta parametrizada no se envía al servidor como una consulta de texto, sino que se envía como un comando Execute con los parámetros adecuados . En otras palabras, no hay sustitución en el nivel de su aplicación, solo en el propio DB. Para ver el comando real, ya que se están ejecutando en el servidor, es posible que desee ver un seguimiento/registro de la base de datos en sí.

Cuestiones relacionadas