Parametrisierte Abfrage in Oracle-Problemen
Ich bin mit Oracle.DataAccess
anstatt die veraltete System.Data.OracleClient
und ich scheinen Schwierigkeiten zu haben die übergabe mehrerer Parameter an meine update Abfrage
Dies funktioniert
OracleCommand.CommandText = "UPDATE db SET column1 = :param1 WHERE column2 = 'Y'"
OracleCommand.Parameters.Add(New OracleParameter("param1", "1234"))
Aber ich möchte in der Lage sein, mehrere Parameter übergeben
Hier ist mein vollständiger code
OracleConn.Open()
OracleCommand = OracleConn.CreateCommand()
OracleCommand.CommandText = "UPDATE db SET column1 = :param1 WHERE column2 = :param2"
OracleCommand.CommandType = CommandType.Text
OracleCommand.Parameters.Add(New OracleParameter("param1", "1234"))
OracleCommand.Parameters.Add(New OracleParameter("param2", "Y"))
OracleCommand.ExecuteNonQuery()
Meine SELECT
Abfrage scheint zu funktionieren, wenn die übergabe mehrerer Parameter, aber nicht das update eine
Kommentar zu dem Problem
Hast du die SQL-Anweisung ausführen mit OracleCommand.ExecuteNonQuery()?
Was ist Ihre OracleCommand.CommandType
@Codo ich habe die
OracleCommand.ExecuteNonQuery()
in der es einfach nur vergessen es in meine Beispiel @Cos Callis ich habe es wie das
OracleCommand.CommandType = CommandType.Text
...und die Oracle-Client verwenden Sie?
InformationsquelleAutor der Frage Jamie Taylor | 2011-05-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Obwohl ich kann nicht sehen, nichts falsch mit Ihrem Beispiel, ich Frage mich, wenn Sie getroffen wird, von der alten
BindByName
problem. Standardmäßig ODP.NET bindet Parameter an die Abfrage in der Reihenfolge, in der Sie Hinzugefügt werden, um die Sammlung, eher als auf der Basis Ihrer Namen, wie Sie möchten. Versuchen SieBindByName
zutrue
auf IhreOracleCommand
Objekt und sehen, ob das das problem behebt.Ich habe dieses problem so viele Male, dass ich meine eigene factory-Methode zum erstellen von Befehlen, die automatisch setzt diese Eigenschaft auf
true
für mich.Classic nutzlos Oracle-Dokumentation hier
InformationsquelleAutor der Antwort batwad
Emulieren das Standardverhalten des Systems.Daten.OracleClient, sollten Sie die OracleCommand zum binden von Namen.
InformationsquelleAutor der Antwort Zach Green
Versuchen newing bis Ihre OracleParameter mit dem angegebenen Typ. Setzen Sie den Wert des Objektes vor dem hinzufügen der Parameter-Liste.
InformationsquelleAutor der Antwort Brian Dishaw
Versuchen, diese, hoffe, es funktioniert. Es tut kompilieren.
Nicht sicher, wenn Sie auch senden ein commit...
Ich immer tun, diese Art der Sache, über die eine gespeicherte Prozedur, also ich habe ein commit nach der update-Anweisung in der gespeicherten Prozedur.
Harvey Sather
InformationsquelleAutor der Antwort Harv
Der erste code-block ist richtig: verwenden Sie einen Doppelpunkt vor dem parameter-Namen, aber nicht im ersten argument OracleParameter.
Wenn keine Fehler geworfen werden, könnte es sein, dass das UPDATE erfolgreich ausgeführt wurde, ist es gerade nicht aktualisieren, werden alle Datensätze auf der Grundlage der WHERE-Klausel und Ihre substituierten parameter-Wert. Versuchen Sie, es zu tun auf einer test-Tabelle ohne WHERE-Klausel in der UPDATE-um sicherzustellen, dass es etwas tut.
InformationsquelleAutor der Antwort Datajam
Hier ist die Art der Struktur, die ich normalerweise benutze (sorry, das ist aus dem Gedächtnis) :
Der wesentliche Unterschied ist die Nutzung der AddWithValue - ich erinnere mich nicht, warum ich am Ende mit, aber erinnere mich an Probleme mit einigen der anderen Möglichkeiten, es zu tun.
InformationsquelleAutor der Antwort chris