2017-03-06 93 views
0

我正在使用Dapper(我不能更快乐),我知道如何访问正常提到的存储过程here,但是,我该如何传递Npgsqlrefcursor名称到proc(使用C#)?例如:Dapper/Npgsql与refcursor参数查询存储过程

我有一个进程,看起来像:

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

我怎么会指定xx.getData参数?

例如,如果接受int类型的只是一个参数getData,然后我可以调用它像这样:

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

OR

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

我不能System.DbType找到正确的类型在查询中传递。

回答

1

请注意,refcursor对应于先前调用中已经打开的活动光标。换句话说,它不对应于存储过程,而是对应于结果集(可能但不一定从存储过程返回)。

以防万一你确实需要发送refcursor,你要找的是NpgsqlDbType.Refcursor

+0

阿汗,谢谢你的信息。实际上,Dapper的'DynamicParameters.Add(...)'接受一个'System.DbType'参数,并且'NpgsqlDbType.RefCursor'没有相应的类型(或者至少我找不到一个)。 – Achilles

+0

您可能想看看Dapper自定义类型处理程序 –