Obtenir la valeur de retour de la procédure stockée à l'aide de ExecuteSqlCommand (à l'aide de Entity Framework)
J'ai un code qui ressemble à ceci:
int retval = databaseContext.Database.ExecuteSqlCommand(command, sqlParameters.ToArray());
Où databaseContext est de type System.Les données.De l'entité.DbContext
Je veux utiliser la valeur de retour pour savoir si oui ou non la procédure stockée a couru avec succès. Basé sur la documentation ExecuteSqlCommand
doit retourner le résultat de la procédure stockée.
Toutefois, La commande renvoie toujours -1 à retval, peu importe ce que j'ai mis la procédure stockée à faire. J'ai essayé de retourner les différents nombres entiers et même l'appel de l'instruction RAISERROR dans la procédure stockée, mais la valeur de retour est toujours -1.
Voici deux stockées procs j'ai essayé, mais ils sont tous deux rentrés -1 et n'a donné aucune indication qu'il a exécuté avec succès ou pas:
CREATE PROCEDURE [dbo].[myproc]
AS
BEGIN
RAISERROR ('You fail', -- Message text.
0, -- Severity - operation failed.
500-- State.
);
END
GO
CREATE PROCEDURE [dbo].[myproc]
AS
BEGIN
RETURN 1
END
GO
Une idée de ce que je fais mal?
non c'est un autre problème. Cette question exige que la requête soit dans un format particulier, tandis que le ExecuteSqlCommand la documentation ne semble pas exiger une telle chose
Si vous voulez que la valeur de retour, vous devez utiliser cette méthode.
ExecuteSqlCommand
de ne pas le faire pour vous, sauf peut-être quelque chose SELECT
s la valeur dans un ensemble de résultats.ah, je vois. J'avais vu cette réponse vous a lié, mais n'avait pas compris la différence. Si vous souhaitez poster un commentaire, comme réponse, je vais l'accepter
Pas vraiment la peine de poster une réponse à ce commentaire.
OriginalL'auteur Zain Rizvi | 2015-11-17
Vous devez vous connecter pour publier un commentaire.
Basé sur DavidG commentaire:
ExecuteSqlCommand renvoie uniquement les valeurs si c'est le résultat d'une instruction select.
Si vous voulez que la valeur de retour d'une procédure stockée (comme indiqué dans la question), alors vous devez utiliser le
EXEC @ReturnValue = [StoredProc] @param1 ...
méthode décrite en cette SORTE de réponse.OriginalL'auteur Zain Rizvi