2017-03-06 4 views
0

J'utilise Dapper (et je ne pouvais pas être plus heureux), je sais comment accéder à des procédures normales stockées comme mentionné here, cependant, comment puis-je passer sur le nom Npgsqlrefcursor à la proc (en utilisant C#)? Par exemple:Dapper/Npgsql procédure stockée avec le paramètre refcursor requête

J'ai un proc qui ressemble à:

FUNCTION xx.getData(
    v_ref refcursor, 
    v_id integer) 
    RETURNS refcursor AS 
... 

Comment puis-je spécifier les paramètres de xx.getData?

Par exemple, si getData accepté un seul paramètre de type int, alors je pourrais l'appeler comme ceci:

var data = cnn.Query<myType>("xx.getData", new {Id = 1}, 
     commandType: CommandType.StoredProcedure); 

OU

var p = new DynamicParameters(); 
p.Add("@id", 11); 
cnn.Execute("xx.getData", p, commandType: CommandType.StoredProcedure); 

Je ne peux pas trouver le bon type dans System.DbType transmettre dans la requête.

Répondre

1

Notez qu'un refcursor correspond à un curseur actif qui a déjà été ouvert lors d'un appel précédent. En d'autres termes, il ne correspond pas à une procédure stockée, mais plutôt à un ensemble de résultats (éventuellement mais pas nécessairement renvoyé à partir d'une procédure stockée). Au cas où vous auriez vraiment besoin d'envoyer un refcursor, vous avez besoin de NpgsqlDbType.Refcursor.

+0

Ahan, merci pour l'information. En fait, 'DynamicParameters.Add (...)' de Dapper accepte un argument 'System.DbType', et il n'y a pas de type correspondant pour' NpgsqlDbType.RefCursor' (ou du moins je ne peux pas en trouver un). – Achilles

+0

Vous voulez probablement jeter un coup d'œil au gestionnaire de type personnalisé Dapper –