编辑:使用Execute
方法而不是Query
/QueryMultiple
方法,我的OUT_SUCCESS
参数现在有一个AttachedParam
与 与 与OracleParameter
有返回值。因此,例如,如果我仅需要检索非游标参数,那么这将起作用。然后我可以使用Execute
对于具有所有非光标输出参数的过程以及Query
/QueryMultiple
对于仅具有光标输出参数的过程。但是,如果我需要调用一个同时具有游标和非游标输出参数的存储过程(通常情况下),该怎么办?
Using Dapper.NET
和OracleDynamicParameters class https://gist.github.com/vijaysg/3096151我已成功返回并映射了多个IN OUT
REF CURSOR
s,但我无法获取单个值OUT
范围。
例如,我试图调用具有以下规范的存储过程:
PROCEDURE DO_SOMETHING (
OUT_SUCCESS OUT VARCHAR2
)
我为此创建了一个相应的 C# 类来对其进行建模,其中包含获取OracleDynamicParameters
, the 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<string>("OUT_SUCCESS"); // 1
OUT_SUCCESS = gridReader.Read<string>().Single(); //2
OUT_SUCCESS = gridReader.Read<DO_SOMETHING>().Single().OUT_SUCCESS; //3
}
但它们都不起作用:
- The
AttachedParam
is null
对于带有名称的参数"OUT_SUCCESS"
(虽然我可以看到参数存在)
- The
gridReader
报告“序列不包含元素”,可能是因为它不知道如何从响应中读取字符串。
- 这似乎是最有希望的 -
InvalidArgumentException
: the gridReader
建议我“使用多重映射 API 时,如果您有 Id 以外的键,请确保设置 splitOn 参数”,但我不太确定这与我的问题有何关系。
顺便说一句,我确实知道该过程已成功执行,因为 ODP.NET 不会产生异常,并且我看到结果行保留在数据库中。
我不知道如何继续,但我真的很想使用 Dapper,因为这是最后一个需要克服的障碍。任何帮助总是值得赞赏。