dapper调用oracle存储过程,c# – 使用Dapper.NET从存储过程调用中获取Oracle OUT参数的值...

编辑:使用Execute方法而不是Query / QueryMultiple方法,我的OUT_SUCCESS参数现在有一个AttachedParam,其中包含一个具有返回值的OracleParameter.因此,如果我只需要检索非游标参数,那么这将起作用.然后,我可以将Execute用于具有所有非游标输出参数的过程,并将Query / QueryMultiple用于仅具有游标输出参数的过程.但是,如果我需要调用具有游标和非游标输出参数的存储过程,通常就是这种情况呢?

使用Dapper.NET和OracleDynamicParameters class我已成功返回并映射了多个IN OUT REF CURSOR,但我无法获得单个OUT参数的值.

例如,我试图使用以下规范调用存储过程:

PROCEDURE DO_SOMETHING (

OUT_SUCCESS OUT VARCHAR2

)

为此我创建了一个相应的C#类来对其进行建模,其中包含获取OracleDynamicParameters,CommandText等的方法,还包括每个参数的自动实现属性

public class DO_SOMETHING {

... //code to return parameters, etc

public string OUT_SUCCESS { get; set; }

...

}

我尝试了以下所有语法:

using (var gridReader = Connection.QueryMultiple(nModel.CommandText(), param: nModel.DynamicParameters(), commandType: nModel.CommandType()))

{

OUT_SUCCESS = ((OracleDynamicParameters)Model.DynamicParameters()).Get("OUT_SUCCESS"); // 1

OUT_SUCCESS = gridReader.Read().Single(); //2

OUT_SUCCESS = gridReader.Read().Single().OUT_SUCCESS; //3

}

但它们都不起作用:

>对于名称为“OUT_SUCCESS”的参数,AttachedParam为null(尽管我可以看到参数存在)

> gridReader报告“序列不包含任何元素”,可能是因为它不知道如何从响应中读取字符串.

>这个看起来最有前途–InvalidArgumentException:gridReader建议我“当使用多映射API确保你设置splitOn参数,如果你有除Id以外的密钥”,但我不确定这是如何与我的问题.

顺便说一句,我知道该过程正在成功执行,因为ODP.NET不会产生异常,我看到结果行在数据库中持久存在.

我不知道如何继续,但我真的很想使用Dapper,因为这是最后一次攀登的障碍.任何帮助总是受到赞赏.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值