Der Datenleser hat beim Aufruf einer Prozedur, die eine ganze Zahl zurückgibt, mehr als einen Feldfehler

8

Ich habe versucht, den Statuscode einer Ausführung einer gespeicherten Prozedur zu erhalten, wenn dieser Fehler aufgetreten ist:

  

Eine Ausnahme vom Typ 'System.Data.Entity.Core.EntityCommandExecutionException' ist in EntityFramework.SqlServer.dll aufgetreten, wurde aber nicht im Benutzercode behandelt

     

Zusätzliche Information: Der Datenleser hat mehr als ein Feld. Mehrere Felder sind für EDM-Grundtypen oder Aufzählungstypen nicht gültig.

Ich habe die Prozedur umgeschrieben, um absolut nichts anderes zu tun, als einen ganzzahligen Wert zurückzugeben, so sieht es jetzt aus:

%Vor%

Aber ich bekomme immer noch den gleichen Fehler zur Laufzeit beim Erreichen des Prozeduraufrufs in Zeile:

%Vor%

Gibt es überhaupt Informationen darüber, was diese Felder sind und woher sie kommen? Und wie soll ich den zurückgegebenen Wert erhalten?

Ich habe versucht, ein Tupel mit zwei Strings als T anzugeben, nur um diese Werte zu sehen, aber ohne Erfolg ...

Updates:
Select 1 statt return 1 macht die Funktion nutzbar, die einzige Frage bleibt, was sind diese mysteriösen Felder, die an den Datenleser zurückgegeben werden?

    
Jyrkka 04.08.2015, 00:16
quelle

4 Antworten

7

Database.SqlQuery<T>() erwartet irgendeine Art von Ergebnismenge (z. B. SELECT ). Unter der Haube verwendet es DbCommand.ExecuteReader() , und wenn T ist skalar und erwartet, dass die Ergebnismenge genau ein Feld enthält. Wenn die Ergebnismenge jedoch mehr als ein Feld enthält, oder wenn keine Felder vorhanden sind, wird die angegebene Ausnahme ausgelöst.

Der Rückgabewert kann abgerufen werden, indem ein DbParameter an Database.SqlQuery<T>() und Einstellung Direction = ParameterDirection.ReturnValue wie in diesen Beispielen zu sehen:

FYI, wenn Sie nur den Rückgabewert wünschen, aber keine Ergebnismenge wollen, verwenden Sie ExecuteSqlCommand mit einem DbParameter .

jjj 04.08.2015 23:18
quelle
0

probiere das

aus %Vor%     
Scharly Ochoa 04.08.2015 00:22
quelle
0

Ich denke, die Antwort von Charlie ist richtig. Aber Sie müssen den Code wie folgt schreiben.

%Vor%     
Ramesh Babu 04.08.2015 07:06
quelle
0

Ich kam zu einer ähnlichen Situation, ich rief eine Prozedur von EF und die Prozedur hatte einige Druckanweisungen, EF wurde verwirrt, da es alle Drucke als Ausgabe liest. Stellen Sie sicher, dass Sie alle Ausdrucke kommentieren, bevor Sie sie in EF verwenden.

    
bhupi singh 12.01.2017 10:19
quelle