oledb / ado.net: ottiene il testo del comando, con tutti i parametri sostituiti
-
05-07-2019 - |
Domanda
È possibile ottenere il testo di un OleDbCommand
con tutti i parametri sostituiti con i loro valori? Per esempio. nel codice qui sotto sto cercando un modo per ottenere il testo della query
SELECT * FROM my_table WHERE c1 = 'hello' and c2 = 'world'
dopo aver finito di assegnare i parametri.
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";
Soluzione
No: devi scorrere tu stesso la raccolta dei parametri, facendo una stringa.Replace () per ottenere l'equivalente. È particolarmente doloroso quando devi usare la sintassi ?
anziché la sintassi @parametername
.
Il motivo è che la stringa completa non è mai assemblata. I parametri e inviati al server e trattati come dati e non sono mai inclusi nella stringa.
Comunque, io per primo capisco il tuo dolore. Sarebbe stato bello se includessero una sorta di metodo .ComposeSQL ()
che potresti chiamare per scopi di debug , che forse produce anche un avvertimento del compilatore per evitare l'uso in produzione .
Altri suggerimenti
Se hai solo bisogno di vedere quale query è stata eseguita e non devi lavorare con essa a livello di codice, puoi usare SQL Profiler.