OleDbCommand-Parameterreihenfolge und -priorität: Ein Fall falsch ausgerichteter Erwartungen
Beim Erstellen von Abfragen mit OleDbCommand ist es entscheidend, die genaue Reihenfolge der Parameter sicherzustellen folgt der Reihenfolge in der SQL-Anweisung. Ein weit verbreitetes Missverständnis beruht auf der Annahme, dass benannte Parameter diese Anforderung beseitigen. Wie jedoch aus einer ausführlichen Debugging-Sitzung hervorgeht, fehlt OleDbCommand die Unterstützung benannter Parameter, wenn CommandType auf Text gesetzt ist.
Im gegebenen Beispiel:
SELECT * FROM tblSomeThing WHERE id = @id AND debut = @dtDebut AND fin = @dtFin
Die Parameter werden hinzugefügt die folgende Reihenfolge:
cmd.Parameters.Add("@id", OleDbType.Integer).Value = idSociete; cmd.Parameters.Add("@dtFin", OleDbType.Date).Value = dateTraitementFin; cmd.Parameters.Add("@dtDebut", OleDbType.Date).Value = dateTraitementDebut;
Es werden jedoch keine Ergebnisse zurückgegeben, was auf eine Inkonsistenz hinweist. Nach der Neuordnung der Parameter entsprechend der SQL-Anweisung wird die Abfrage erfolgreich ausgeführt:
cmd.Parameters.Add("@id", OleDbType.Integer).Value = idSociete; cmd.Parameters.Add("@dtDebut", OleDbType.Date).Value = dateTraitementDebut; cmd.Parameters.Add("@dtFin", OleDbType.Date).Value = dateTraitementFin;
Dies stimmt mit der Dokumentation unter http://msdn.microsoft.com/en-us/library/system.data überein. oledb.oledbcommand.parameters.aspx, in dem ausdrücklich angegeben ist, dass OleDbCommand keine benannten Parameter für SQL-Anweisungen im Textmodus unterstützt. Stattdessen müssen Fragezeichen-Platzhalter (?) verwendet werden, und die Reihenfolge der OleDbParameter-Objekte in der Sammlung muss genau ihrer Platzierung im Befehlstext entsprechen.
Das obige ist der detaillierte Inhalt vonSpielt die Reihenfolge der OleDbCommand-Parameter eine Rolle, wenn CommandType Text ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!