Ich habe eine gespeicherte Prozedur mit drei Parametern und habe versucht, Folgendes zu verwenden, um die Ergebnisse zurückzugeben:
context.Database.SqlQuery<myEntityType>("mySpName", param1, param2, param3);
Zuerst habe ich versucht, SqlParameter
Objekte als Parameter zu verwenden, aber das hat nicht funktioniert und eine SqlException
mit der folgenden Meldung ausgegeben :
Prozedur oder Funktion 'mySpName' erwartet den Parameter '@ param1', der nicht angegeben wurde.
Meine Frage ist also, wie Sie diese Methode mit einer gespeicherten Prozedur verwenden können, die Parameter erwartet.
Vielen Dank.
c#
sql
ado.net
linq-to-entities
entity-framework-ctp5
Elektrikschaf
quelle
quelle
Antworten:
Sie sollten die SqlParameter-Instanzen folgendermaßen bereitstellen:
quelle
DbNull.Value
Löst das Übergeben anstelle von Nullen das Problem?Sie können auch den Parameter "sql" als Formatbezeichner verwenden:
quelle
ProcName @optionalParam1 = @opVal1, @optionalParam2 = @opVal2
Beispiel, das funktioniert:ProcName @optionalParam1 = {0}, @optionalParam2 = {1}
Diese Lösung ist (nur) für SQL Server 2005
Ihr seid Lebensretter, aber wie @Dan Mork sagte, müsst ihr EXEC zum Mix hinzufügen. Was mich auslöste war:
::
quelle
exec
, aber ich kann bestätigen, dass ich eine Ausnahme erhalte, wenn ich sie weglasse.exec
Schlüsselwort nicht. +1 für das Entfernen des @ in den Parametern, das bringt mich immer durcheinander.//Oder
//Oder
//Oder
quelle
Die meisten Antworten sind spröde, da sie von der Reihenfolge der SP-Parameter abhängen. Benennen Sie besser die Parameter des gespeicherten Prozesses und geben Sie diesen parametrisierte Werte.
Um beim Aufrufen Ihres SP benannte Parameter zu verwenden, ohne sich um die Reihenfolge der Parameter kümmern zu müssen
Verwenden von benannten SQL Server-Parametern mit ExecuteStoreQuery und ExecuteStoreCommand
Beschreibt den besten Ansatz. Besser als Dan Morks Antwort hier.
Z.B:
quelle
sqlParams
Variableoder
oder
oder
quelle
Ich benutze diese Methode:
Ich mag es, weil ich nur Guids und Datetimes einfüge und SqlQuery die gesamte Formatierung für mich durchführt.
quelle
Die Antwort von @Tom Halladay ist richtig mit der Erwähnung, dass Sie auch nach Nullwerten suchen und DbNullable senden sollten, wenn die Parameter null sind, da Sie eine Ausnahme wie erhalten würden
Die parametrisierte Abfrage '...' erwartet den Parameter '@parameterName', der nicht angegeben wurde.
So etwas hat mir geholfen
(Gutschrift für die Methode geht an https://stackoverflow.com/users/284240/tim-schmelter )
Dann benutze es wie folgt:
oder eine andere Lösung, einfacher, aber nicht generisch wäre:
quelle
Ich hatte die gleiche Fehlermeldung, als ich mit dem Aufrufen einer gespeicherten Prozedur arbeitete, die zwei Eingabeparameter verwendet und 3 Werte mit der SELECT-Anweisung zurückgibt, und das Problem wie unten in EF Code First Approach gelöst
UPDATE : Es sieht so aus, als würde bei SQL SERVER 2005 das fehlende EXEC-Schlüsselwort ein Problem verursachen. Damit es mit allen SQL SERVER-Versionen funktioniert, habe ich meine Antwort aktualisiert und EXEC in der folgenden Zeile hinzugefügt
quelle
Ich habe meine mit EF 6.x so gemacht:
Verdoppeln Sie nicht den SQL-Parameter. Einige Leute werden verbrannt, wenn sie dies mit ihrer Variablen tun
quelle