Est-il possible d'appeler une procédure stockée avec Dapper?

.net dapper orm stored-procedures

Question

Je suis très impressionné par les résultats de Dapper Micro ORM pour stackoverflow.com. Je l’envisage pour mon nouveau projet, mais j’ai un problème avec le fait que certaines fois, mon projet nécessite d’avoir une procédure stockée et que j’ai beaucoup cherché sur le Web, mais je n’ai rien trouvé avec la procédure stockée. Est-il donc possible que Dapper fonctionne avec une procédure stockée?

S'il vous plaît laissez-moi savoir si c'est possible sinon je dois l'étendre à ma façon.

Réponse acceptée

Dans le cas simple, vous pouvez faire:

var user = cnn.Query<User>("spGetUser", new {Id = 1}, 
        commandType: CommandType.StoredProcedure).First();

Si vous voulez quelque chose de plus chic, vous pouvez faire:

 var p = new DynamicParameters();
 p.Add("@a", 11);
 p.Add("@b", dbType: DbType.Int32, direction: ParameterDirection.Output);
 p.Add("@c", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);

 cnn.Execute("spMagicProc", p, commandType: CommandType.StoredProcedure); 

 int b = p.Get<int>("@b");
 int c = p.Get<int>("@c"); 

De plus, vous pouvez utiliser exec dans un lot, mais c'est plus maladroit.


Réponse populaire

Je pense que la réponse dépend des fonctionnalités des procédures stockées que vous devez utiliser.

Les procédures stockées renvoyant un jeu de résultats peuvent être exécutées à l'aide de Query ; Les procédures stockées qui ne renvoient pas un jeu de résultats peuvent être exécutées à l'aide de Execute - dans les deux cas (en utilisant EXEC <procname> ) en tant que commande SQL (plus les paramètres d'entrée nécessaires). Voir la documentation pour plus de détails.

À partir de la révision 2d128ccdc9a2, il ne semble pas y avoir de prise en charge native des paramètres OUTPUT ; vous pouvez ajouter ceci, ou bien construire une commande de Query plus complexe qui déclare les variables TSQL, exécute le SP collectant les paramètres OUTPUT dans les variables locales et les renvoie finalement dans un jeu de résultats:

DECLARE @output int

EXEC <some stored proc> @i = @output OUTPUT

SELECT @output AS output1



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi