Verwenden Sie Dapper.net, um die gespeicherte Prozedur aufzurufen, geben Sie immer -1 zurück

7

Hier ist meine gespeicherte Prozedur. Wenn ich es teste, bekomme ich immer das richtige Ergebnis zurück.

%Vor%

Wenn ich diese gespeicherte Prozedur jedoch unter dapper.net aufruft, gebe immer -1 zurück.

%Vor%

Wahrscheinlich kann dapper.net den Rückgabewert nicht von der gespeicherten Prozedur übernehmen. aber ich weiß wirklich nicht, wie ich es beheben kann. bitte hilfe.

    
qinking126 09.09.2012, 22:55
quelle

4 Antworten

14

Der Grund dafür, dass Execute () den Wert -1 zurückgibt, liegt daran, dass Ihr Sproc SET NOCOUNT ON; hat, was die "xx rows affected" Nachricht nach einer DML "unterdrückt" gemäß diese Frage . Ob Sie das deaktivieren möchten oder nicht, ist eine weitere Frage, die auch in diesem Link behandelt wird.

Ich bin gerade auf das gleiche Problem gestoßen, also dachte ich, ich würde meine 2 Cent einwerfen.

    
joakes 04.02.2014 04:58
quelle
13

Die Lösung gefunden, hier ist der Beispielcode, den ich online gefunden habe. und es funktioniert.

%Vor%     
qinking126 10.09.2012 00:09
quelle
2

Es sieht so aus, als ob Dapper.net SqlCommand.ExecuteNonQuery für die Execute-Methode verwendet. Dies gibt die Anzahl der betroffenen Zeilen und nicht den Wert der return-Anweisung zurück. Was du suchst, ist Query

%Vor%

Obwohl ich nicht glaube, dass auch die return-Anweisung erfasst wird, müssen Sie in diesem Fall die gespeicherte Prozedur ändern, um eine Ergebnismenge zurückzugeben.

%Vor%

Oder Sie könnten eine andere DB-Zugriffsmethode verwenden.

    
Zeph 09.09.2012 23:37
quelle
1

Kürzlich musste ich eine bestehende Prozedur ändern, um zusätzlich einen Wert zurückzugeben, und ich hatte einen anonymen Typ verwendet, um die Parameter zu übergeben. In diesem Zusammenhang ist das wirklich schöne daran, dass DynamicParameters einen anonymen Typ als Eingabeparameter unterstützt, wodurch diese Änderung einfach zu implementieren ist.

Ich hatte folgendes:

%Vor%

Ich konnte das ändern zu:

%Vor%     
takrl 29.08.2016 08:02
quelle