使用多个查询读取多个结果集

时间:2019-04-25 12:05:12

标签: c# dapper multiple-resultsets

我的过程返回两个结果集/表, 我想将这两个结果集读取到两个不同的列表中并绑定该列表。

我能够将一个结果集读取到列表中,但是我尝试了多种方法将多个结果集读取到动态列表中,但这给了我“ 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();

请帮助。

1 个答案:

答案 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();

            ...
        }