Ein Weg, um zu sehen Abfrage nach Parameter angewendet werden?
In einer C# - Anwendung Baue ich eine Abfrage erstellen eine Abfrage-string mit Parametern, dann auf den Befehl hinzufügen die Parameter und Ihre Werte. Zum Beispiel:
string query = "UPDATE USERS u SET u.username = @PARM_USERNAME " +
"WHERE u.id = @PARM_USERID ";
command.Parameters.AddWithValue("@PARM_USERNAME", user.username);
command.Parameters.AddWithValue("@PARM_USERID", user.id);
command.Connection.Open();
int res = command.ExecuteNonQuery();
Es wäre von Vorteil, um die query mit Parametern angewendet, ist das machbar in C#/Visual Studio? Kann ich den Befehl.CommandText, aber es ist nur zu zeigen, mir den gleichen Inhalt wie die obige Abfrage mit dem parameter-Platzhalter dort. Wenn es hilft, ist dies gegen MySQL.
InformationsquelleAutor Mike | 2011-10-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine Garantie, dass es ist so etwas wie "die Abfrage mit den Parametern angewendet". Ich würde hoffe, dass ein Fahrer würde einfach senden Sie die Befehl als SQL und die Parameter in eine geeignete form zum darstellen der einzelnen Wert. Warum gehen Sie zu der Mühe von der Flucht-Werte usw, nur für den query-Prozessor zu unescape Sie und analysieren Sie auf der anderen Seite? Es ist effizienter und weniger riskant ist, geben Sie einfach die Daten in einem binären format von einigen Beschreibung.
Betrachten Sie es als code (SQL), die verwendet einige Daten (die Parameter) und halten Sie die beiden Konzepte sehr getrennt, in Ihrem Geist. Wenn Sie sich anmelden müssen, was Los ist, ich würde es protokolliert als wird die parametrisierte SQL-und-parameter-Werte getrennt.
Es ist möglich, die Sie sind - aber sicher nicht erforderlich, und ich hoffe, Sie sind es nicht 🙂
InformationsquelleAutor Jon Skeet
Wenn Sie möchten, um die query mit Parametern angewendet:
tmp wird dann halt die Abfrage mit den Parametern angewendet.
Jeder parameter wird in einfache Anführungszeichen gesetzt werden.
Natürlich, es ist NICHT sicher zu führen. Ich benutze es für debugging-Zwecke.
Wenn Sie das tun .AddWithValue("@P1", ...), dann ParameterName beginnt bereits mit einem '@', also den oben genannten code versucht zu ersetzen "@@P1" mit dem Wert, so funktioniert es nicht. Was bin ich?
Ich weiß, das ist alt, aber dein code Probleme hat. Erstens, verwenden Sie
command
auf die erste Zeile, undcmd
auf die andere. Sie sollten gleich sein. Zweitens ist es nicht notwendig, rufenToString()
aufCommandText
. Es ist bereits ein string. Als Nächstes der parameter sollte nur sein eingeschlossen in Zitat, wenn es eine zitierfähige Wert. Ganze zahlen, zum Beispiel, sind nicht. Und schließlich, wie bereits erwähnt, sollten Sie nicht voranstellen@
dem Namen des Parameters, wie es in der Regel schon haben.InformationsquelleAutor Christopher Thomas Nicodemus
Parameter getrennt bleiben den ganzen Weg auf den server, so dass die Abfrage-string, den Sie sehen, ist, was wirklich geht auf den server, unabhängig von den Parametern. Also ich glaube, Sie brauchen, um mehr direkt zu verstehen, wie parametrisierte Abfragen arbeiten, anstatt zu versuchen, um zu sehen, was die Abfrage würde wie folgt Aussehen, wobei die Parameter im Ort. Sie können die SQL-Ablaufverfolgung zu sehen, die Abfrage kommen. Die Parameter werden immer noch trennen, aber es wird sich zeigen Sie die Werte.
Meiner Erfahrung mit SQL Server, so dass ich nicht sicher bin, wie zutreffend dies ist, um MySQL.
InformationsquelleAutor BlueMonkMN
Nicht sicher, warum Sie dies brauchen, aber wenn es für debugging-Zwecke können Sie immer wiederum auf das Globale log auf dem lokalen mysql-Datenbank-Maschine zu sehen, die Abfrage an die Datenbank geschickt (Sie wollen nicht, um es einzuschalten auf einer Produktions-Maschine, obwohl es vielleicht verlangsamen Sie es deutlich).
InformationsquelleAutor krakover
Wenn Sie möchten, verwenden Sie ein Werkzeug, das Sie könnten versuchen, mit Toad for MySql, die hat einen Profiler, und Sie können sehen, was Sie an den server gesendet.
InformationsquelleAutor Hanlet Escaño
@christopher die Antwort war großartig, aber nur string-Parameter müssen
'
(Hochkommas). das beste ist, verwenden Sie die folgende Methode:InformationsquelleAutor Amir Ziarati