oledb / ado.net: Holen Sie den Text des Befehls, wobei alle Parameter ersetzt
-
05-07-2019 - |
Frage
Ist es möglich, den Text eines OleDbCommand
mit allen Parametern mit ihren Werten ersetzt zu bekommen? Z.B. in dem folgenden Code für einen Weg, ich bin auf der Suche die Abfrage Text
SELECT * FROM my_table WHERE c1 = 'hello' and c2 = 'world'
, nachdem ich die Zuordnung der Parameter beendet.
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";
Lösung
Nein: Sie haben sich durch die Parameter-Auflistung zu durchlaufen, eine String.Replace () tun das Äquivalent zu bekommen. Es ist besonders schmerzhaft, wenn Sie die ?
Syntax verwenden, anstatt die @parametername
Syntax.
Der Grund dafür ist, dass die vollständige Zeichenfolge nie zusammengesetzt. Die Parameter und an den Server gesendet und als Daten behandelt, und werden nie in der Zeichenfolge enthalten.
das gleiche, ich für ein Verständnis für Ihre Schmerzen. Es wäre schön gewesen, wenn sie irgendeine Art von .ComposeSQL()
Methode enthalten Sie nennen könnten für Debugging-Zwecke , dass vielleicht produziert auch eine Compiler-Warnung zu helfen, den Einsatz in der Produktion zu vermeiden.
Andere Tipps
Wenn Sie müssen nur sehen, welche Abfrage ausgeführt wurde und brauchen nicht programmatisch mit ihm zu arbeiten, können Sie SQL Profiler verwenden.