oledb / ado.net: Récupère le texte de la commande avec tous les paramètres remplacés

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

  •  05-07-2019
  •  | 
  •  

Question

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ête

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

après avoir fini d'attribuer 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";
Était-ce utile?

La solution

Non: vous devez parcourir vous-même la collection de paramètres en faisant un string.Replace () pour obtenir l’équivalent. C'est particulièrement pénible lorsque vous devez utiliser la syntaxe ? plutôt que la syntaxe @ nom_paramet .

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

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

Autres conseils

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top