Ruft den Wert des Oracle OUT-Parameters aus einem Aufruf einer gespeicherten Prozedur mit Dapper.NET ab

8

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

%Vor%

und ich habe alle folgende Syntax versucht:

%Vor%

aber keiner von ihnen funktioniert:

  1. Die AttachedParam ist null für den Parameter mit dem Namen "OUT_SUCCESS" (obwohl ich den Parameter sehen kann)
  2. Die gridReader meldet, dass die "Sequenz keine Elemente enthält", wahrscheinlich weil sie keine Ahnung hat, wie man eine Zeichenfolge aus der Antwort liest.
  3. Dieser scheint der vielversprechendste - 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.

    
tacos_tacos_tacos 18.04.2014, 00:19
quelle

2 Antworten

0

Schließen Sie die Verbindung und lesen Sie den Ausgabeparameter.

    
Carl Prothman 16.05.2015 18:17
quelle
0

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%     
Scott Christensen 19.01.2018 21:05
quelle

Tags und Links