J'ai une procédure stockée qui a trois paramètres et j'ai essayé d'utiliser les éléments suivants pour renvoyer les résultats:
context.Database.SqlQuery<myEntityType>("mySpName", param1, param2, param3);
Au début, j'ai essayé d'utiliser des SqlParameter
objets comme paramètres, mais cela n'a pas fonctionné et j'ai lancé un SqlException
avec le message suivant:
La procédure ou la fonction 'mySpName' attend le paramètre '@ param1', qui n'a pas été fourni.
Ma question est donc de savoir comment utiliser cette méthode avec une procédure stockée qui attend des paramètres?
Merci.
c#
sql
ado.net
linq-to-entities
entity-framework-ctp5
mouton électrique
la source
la source
Réponses:
Vous devez fournir les instances SqlParameter de la manière suivante:
la source
DbNull.Value
au lieu de null résout le problème?Vous pouvez également utiliser le paramètre "sql" comme spécificateur de format:
la source
ProcName @optionalParam1 = @opVal1, @optionalParam2 = @opVal2
Exemple qui fonctionne:ProcName @optionalParam1 = {0}, @optionalParam2 = {1}
Cette solution est (uniquement) pour SQL Server 2005
Vous êtes des sauveteurs, mais comme l'a dit @Dan Mork, vous devez ajouter EXEC au mix. Ce qui me faisait trébucher, c'était:
:
la source
exec
, mais je peux confirmer que j'obtiens une exception si je l'omet.exec
mot - clé. +1 pour la suppression du @ sur les paramètres, ça me dérange toujours.//Ou
//Ou
//Ou
la source
La plupart des réponses sont fragiles car elles dépendent de l'ordre des paramètres du SP. Mieux vaut nommer les paramètres du Proc stocké et leur donner des valeurs paramétrées.
Afin d'utiliser les paramètres Named lors de l'appel de votre SP, sans vous soucier de l'ordre des paramètres
Utilisation de paramètres nommés SQL Server avec ExecuteStoreQuery et ExecuteStoreCommand
Décrit la meilleure approche. Mieux que la réponse de Dan Mork ici.
Par exemple:
la source
sqlParams
variableou
ou
ou
la source
J'utilise cette méthode:
Je l'aime parce que je viens de déposer Guids et Datetimes et SqlQuery effectue tout le formatage pour moi.
la source
La réponse de @Tom Halladay est correcte avec la mention que vous devez également vérifier les valeurs nulles et envoyer DbNullable si les paramètres sont nuls car vous obtiendriez une exception comme
La requête paramétrée '...' attend le paramètre '@parameterName', qui n'a pas été fourni.
Quelque chose comme ça m'a aidé
(le crédit de la méthode va à https://stackoverflow.com/users/284240/tim-schmelter )
Ensuite, utilisez-le comme:
ou une autre solution, plus simple, mais pas générique serait:
la source
J'ai eu le même message d'erreur lorsque je travaillais avec l'appel d'une procédure stockée qui prend deux paramètres d'entrée et renvoie 3 valeurs à l'aide de l'instruction SELECT et j'ai résolu le problème comme ci-dessous dans EF Code First Approach
MISE À JOUR : Il semble qu'avec SQL SERVER 2005, le mot-clé EXEC manquant crée un problème. Donc, pour lui permettre de fonctionner avec toutes les versions de SQL SERVER, j'ai mis à jour ma réponse et ajouté EXEC dans la ligne ci-dessous
la source
J'ai fait le mien avec EF 6.x comme ceci:
Ne doublez pas le paramètre sql, certaines personnes se brûlent en faisant cela à leur variable
la source