Ich wurde beauftragt, eines dieser fiesen "GUI-basierten Programmier" -Dinge zu ersetzen, die Unternehmen manchmal kaufen, wenn sie versuchen, ihre Programmierer mit einer .Net Core-App unter Verwendung von Dapper zu verkleinern (jetzt, da sie erkannt haben, dass es ein schrecklicher Fehler war und Müllcode gemacht).
Es ist mir nicht gestattet, die gespeicherten Prozesse in ihrer jetzigen Form zu ändern.
Der aufgerufene Prozess enthält zwei Werte, eine select
Anweisung und einen return
, die beide irgendwie von der App abgerufen wurden. Wir können nicht sehen, wie die App es gemacht hat; Dies ist in proprietären "Kern" -Bibliotheken verschleiert. Es sieht ungefähr so aus:
--things it does
Select Prop1, Prop2, Prop3 from TheTable;
Return 0; --success
(Ich kann die eigentliche Abfrage nicht einfügen, da wir aggressive Cybersicherheit haben, aber dies ist die Grundlogik dahinter. Es gibt keine OUT-Parameter.)
Wenn ich ExecuteAsync(
-Methode verwende, ExecuteAsync(
ich je nach Rückgabewert nur einen Rückgabewert von 0 oder null. Ich habe versucht, ihn in eine Abfrage zu ändern, aber ich erhalte immer null, auch wenn es einen Wert gibt, der den gleichen Wert angibt Parameter zum Prozess in SSMS.
var result = await _dbc.QueryFirstOrDefaultAsync<dynamic>("storedproc", paramsObject);
Wie kann ich auch die Ergebnisse der select-Anweisung abrufen, ohne die gespeicherte Prozedur zu ändern, um beide in Variablen zurückzugeben?
Fügen Sie einen Ausgabeparameter hinzu, um den Rückkehrcode zu erfassen.
Z.B
var result = await _dbc.QueryFirstOrDefaultAsync<dynamic>("exec @rc = storedproc", paramsObject);
Oder verwenden Sie die Prozedur CommandType.Stored mit einem ReturnValue-Parameter. Per Übergabe der Ausgabeparameter an die gespeicherte Prozedur unter Verwendung von Dapper im C # -Code