我的过程返回两个结果集/表, 我想将这两个结果集读取到两个不同的列表中并绑定该列表。
我能够将一个结果集读取到列表中,但是我尝试了多种方法将多个结果集读取到动态列表中,但这给了我“ TTC错误Oracle”。
如何使用QueryMultiple读取多个结果集?
用于将单个结果集读取到动态列表中的代码:
public ResponseModel GetDoctorDetails(CustomerRequest data)
{
try
{
var p = new OracleDynamicParameters();
p.Add("p_parameter1", data.PARAMETER1, dbType: OracleDbType.Int32, direction: ParameterDirection.Input, size: 8);
p.Add("p_parameter2", data.PARAMETER2, dbType: OracleDbType.Int32, direction: ParameterDirection.Input, size: 8);
p.Add("p_out_cursor", dbType: OracleDbType.RefCursor, direction: ParameterDirection.Output, size: 0);
using (var multi = _oracleConnection.QueryMultiple("procedure_name", param: p, commandType: CommandType.StoredProcedure))
{
List<dynamic> list = multi.Read<dynamic>().AsList();
return new ResponseModel { ResultSet = list, StatusCode = 1, StatusDescription = "Success" };
}
}
catch (Exception ex)
{
throw ex;
}
}
我尝试了以下方法来读取多个结果集,但这给了我“ TTC错误”
List<DataTable> list = new List<DataTable>();
list = multi.Read<DataTable>().AsList();
和
List<List<dynamic>> list = new List<List<dynamic>>();
list = multi.Read<List<dynamic>>().AsList();
请帮助。
答案 0 :(得分:2)
看起来您必须做两件事。
首先,您需要一种映射空间的方法。为此,您必须创建自己的映射器以供Dapper读入。您可以在此处查看操作方法:
Dapper. Map to SQL Column with spaces in column names
对于多个查询,您只需要为每组调用Read多次:
using (var multi = _oracleConnection.QueryMultiple("procedure_name", param: p, commandType: CommandType.StoredProcedure))
{
List<dynamic> list1 = multi.Read<dynamic>().AsList();
List<dynamic> list2 = multi.Read<dynamic>().AsList();
List<dynamic> list3 = multi.Read<dynamic>().AsList();
...
}