Bearbeiten: Mit der Execute
-Methode anstelle der Query
/ QueryMultiple
-Methoden hat mein OUT_SUCCESS
-Parameter jetzt einen AttachedParam
mit einem OracleParameter
, der den zurückgegebenen Wert hat. Das würde also funktionieren, wenn ich zum Beispiel nur Nicht-Cursor-Parameter abrufen müsste. Dann könnte ich Execute
für Prozeduren mit allen Nicht-Cursor-Ausgabeparametern und Query
/ QueryMultiple
für Prozeduren mit nur Cursor-Ausgabeparametern verwenden. Aber was ist, wenn ich eine gespeicherte Prozedur aufrufen muss, die beide Cursor- und Nicht-Cursor-Ausgabeparameter hat, wie es oft der Fall ist?
Mit Dapper.NET
und der OracleDynamicParameters
Klasse habe ich erfolgreich mehrere IN OUT
REF CURSOR
zurückgegeben und zugeordnet. s, aber ich kann den Wert nicht einen einzelnen OUT
-Parameter erhalten.
Ich versuche zum Beispiel, eine gespeicherte Prozedur mit der folgenden Spezifikation aufzurufen:
%Vor%, für die ich eine entsprechende C # -Klasse erstellt habe, um sie zu modellieren, die Methoden zum Abrufen von OracleDynamicParameters
, CommandText
usw. enthält, und enthält außerdem eine automatisch implementierte Eigenschaft für jeden Parameter
und ich habe alle folgende Syntax versucht:
%Vor%aber keiner von ihnen funktioniert:
AttachedParam
ist null
für den Parameter mit dem Namen "OUT_SUCCESS"
(obwohl ich den Parameter sehen kann) gridReader
meldet, dass die "Sequenz keine Elemente enthält", wahrscheinlich weil sie keine Ahnung hat, wie man eine Zeichenfolge aus der Antwort liest. InvalidArgumentException
: Der gridReader
rät mir, dass "Wenn Sie die Multi-Mapping-APIs verwenden, stellen Sie sicher, dass Sie den splitOn-Parameter setzen, wenn Sie andere Schlüssel als Id haben", aber ich bin nicht wirklich sicher, wie das für mein Problem relevant ist. Übrigens weiß ich, dass die Prozedur erfolgreich ausgeführt wird, weil ODP.NET keine Ausnahme erzeugt und ich die resultierenden Zeilen in der Datenbank beibehalten sehe.
Ich weiß nicht, wie ich vorgehen soll, aber ich würde gerne Dapper verwenden, da dies die letzte verbleibende Hürde ist. Jede Hilfe wird immer geschätzt.
Schließen Sie die Verbindung und lesen Sie den Ausgabeparameter.
Ich weiß, dass dies extrem spät ist und für alle, außer mir, allgemein bekannt sein kann, aber es gibt einen Kommentar in der ursprünglichen Nachricht von vor nicht allzu langer Zeit, also beschreibe ich, wie ich den Cursor bewegt habe Out-Parameter sowie Nicht-Cursor-Out-Parameter.
Da mein Beispiel nur einen Oracle-Cursor hat, kann ich die Methode Query verwenden. Die Ergebnisse der anderen Out-Parameter sind in den Parametern selbst und können mit Get & lt; & gt; Methode in der OracleDynamicParameters-Klasse.
Der andere wichtige Teil für mich war, eine Größe zu meinen out-Parametern hinzuzufügen, sonst kamen sie als leere oder leere Zeichenfolgen zurück.
Unten ist ein Beispiel für den Code, den ich verwende.
%Vor%