Mam procedurę składowaną, która ma trzy parametry i próbuję użyć następujących do zwrócenia wyników:
context.Database.SqlQuery<myEntityType>("mySpName", param1, param2, param3);
Na początku próbowałem użyć SqlParameter
obiektów jako parametrów, ale to nie zadziałało i rzuciłem SqlException
następujący komunikat:
Procedura lub funkcja „mySpName” oczekuje parametru „@ param1”, który nie został podany.
Więc moje pytanie brzmi, jak można użyć tej metody z procedurą składowaną, która oczekuje parametrów?
Dzięki.
c#
sql
ado.net
linq-to-entities
entity-framework-ctp5
elektryczność
źródło
źródło
Odpowiedzi:
Należy podać instancje SqlParameter w następujący sposób:
źródło
DbNull.Value
zamiast wartości zerowej rozwiązuje problem?Możesz także użyć parametru „sql” jako specyfikatora formatu:
źródło
ProcName @optionalParam1 = @opVal1, @optionalParam2 = @opVal2
Przykład, który działa:ProcName @optionalParam1 = {0}, @optionalParam2 = {1}
To rozwiązanie jest (tylko) dla SQL Server 2005
Jesteście ratownikami, ale jak powiedział @Dan Mork, musicie dodać EXEC do miksu. To, co mnie potknęło, to:
:
źródło
exec
, ale mogę potwierdzić, że dostaję wyjątek, jeśli go pominę.exec
słowa kluczowego. +1 za usunięcie @ z parametrów, które zawsze mnie psują.//Lub
//Lub
//Lub
źródło
Większość odpowiedzi jest krucha, ponieważ opierają się na kolejności parametrów SP. Lepiej nazwać parametry Stored Proc i nadać im sparametryzowane wartości.
Aby korzystać z Nazwanych parametrów podczas dzwonienia do SP, nie martwiąc się o kolejność parametrów
Używanie nazwanych parametrów SQL Server z ExecuteStoreQuery i ExecuteStoreCommand
Opisuje najlepsze podejście. Lepsze niż odpowiedź Dana Morka tutaj.
Na przykład:
źródło
sqlParams
zmiennejlub
lub
lub
źródło
Używam tej metody:
Podoba mi się, ponieważ po prostu wprowadzam Guids i Datetimes, a SqlQuery wykonuje dla mnie całe formatowanie.
źródło
Odpowiedź @Toma Halladaya jest poprawna, z wzmianką o tym, że kupujesz również sprawdzanie wartości zerowych i wysyłasz DbNullable, jeśli parametry są zerowe, ponieważ otrzymujesz wyjątek, taki jak
Sparametryzowane zapytanie „...” oczekuje parametru „@parameterName”, który nie został podany.
Pomogło mi coś takiego
(uznanie za metodę trafia na https://stackoverflow.com/users/284240/tim-schmelter )
Następnie użyj go w następujący sposób:
lub innym rozwiązaniem, prostszym, ale nie ogólnym byłoby:
źródło
Miałem ten sam komunikat o błędzie, gdy pracowałem z wywołaniem procedury składowanej, która pobiera dwa parametry wejściowe i zwraca 3 wartości za pomocą instrukcji SELECT, i rozwiązałem problem jak poniżej w Pierwszym podejściu do kodu EF
AKTUALIZACJA : Wygląda na to, że brakujące słowo kluczowe EXEC w programie SQL SERVER 2005 stwarza problem. Aby umożliwić działanie ze wszystkimi wersjami SQL SERVER, zaktualizowałem swoją odpowiedź i dodałem EXEC w poniższym wierszu
źródło
Zrobiłem mój z EF 6.x w ten sposób:
Nie podwajaj parametru sql, niektórzy ludzie palą się, robiąc to ze swoją zmienną
źródło