2008-10-07 6 views
4

Est-il possible d'obtenir le texte d'un OleDbCommand avec tous les paramètres remplacés par leurs valeurs? Par exemple. dans le code ci-dessous je cherche un moyen d'obtenir le texte de la requêteoledb/ado.net: Récupère le texte de la commande, avec tous les paramètres remplacés

SELECT * FROM my_table WHERE c1 = 'hello' and c2 = 'world' 

après avoir fini d'affecter les paramètres.

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"; 

Répondre

8

Non: vous devez parcourir la collection de paramètres vous, faire un String.replace() pour obtenir l'équivalent. C'est particulièrement pénible lorsque vous devez utiliser la syntaxe ? plutôt que la syntaxe @parametername.

La raison en est que la chaîne complète est jamais assemblée. Les paramètres et envoyés au serveur et traités comme des données, et ne sont jamais inclus dans la chaîne.

Tout de même, pour ma part, je comprends votre douleur. Cela aurait été bien s'ils incluaient une sorte de méthode .ComposeSQL() que vous pourriez appeler à des fins de débogage, qui produit peut-être aussi un avertissement de compilateur pour aider à éviter l'utilisation en production.

3

Si vous avez juste besoin de voir quelle requête a été exécutée et n'avez pas besoin de travailler par programmation, vous pouvez utiliser SQL Profiler.

Questions connexes