IIOT-Zero
IIOT-Zero

Reputation: 159

Get the count of resultsets/Tables returned from dapper .QueryMultiple Method

While using Dapper for multiple Query:

 var result = sqlConnection.QueryMultiple(query, Parameters, commandType: commandType);

How can i get the table count returned from query? It has two overloaded implementation of .Read() method, which each time called, moves to next available result set (No result.Count() property). Eventually i want to put that number in a loop to iterate as many time as number of tables returned from query.

Upvotes: 5

Views: 4770

Answers (4)

Deathstalker
Deathstalker

Reputation: 834

var reader = this.DbConnection.QueryMultipleAsync(sql, Params, commandType: CommandType.StoredProcedure).Result; 

if(reader.IsConsumed == false)
    {
        DeviceTypeReport = reader?.ReadAsync<dynamic>().Result;
    }

This is probably what you are looking for hope it helps.

Upvotes: 6

sandeep
sandeep

Reputation: 1

public List NotificationExecuteMultiple(OutdoorRequest objreq, IConfiguration configuration)

    {
        var lst = new List<dynamic>();
        using (DbConnection connection = new MySqlConnection(configuration.GetConnectionString("SquareHrConn")))
        {
            using (var dr = connection.QueryMultiple(ProcedureName, GetParamenter(objreq), commandType: CommandType.StoredProcedure))
            {
                while (dr.IsConsumed == false)
                {
                    lst.Add(dr.Read());
                }
            }
        }
        return lst;
    }

Upvotes: 0

Parimal Vaghasiya
Parimal Vaghasiya

Reputation: 141

This is probably what you are looking for hope it helps.

    List<dynamic> data = new List<dynamic>();
    while (reader.IsConsumed == false)
    {
       data.Add(await reader?.ReadAsync<dynamic>());
    }
    int totalRecordSet = data.Count;

Upvotes: 3

Hitae Lee
Hitae Lee

Reputation: 1

Consider the follwoing method to cover all cases

protected List<object> ExecuteMultiQuery<A, B, C, D, E, F, G, H, I, J>(string procedureName, DynamicParameters param = null)

    {
        List<object> result = new List<object>();
        using (var connection = new SqlConnection(ConnectionManager.ConnectionString))
        {
            try
            {
                connection.Open();
                using (var multi = connection.QueryMultiple(procedureName, param, commandType: CommandType.StoredProcedure, commandTimeout: 120))
                {
                    var varA = multi.Read<A>();
                    if (varA != null) { result.Add(varA.ToList()); }
                    var varB = multi.Read<B>();
                    if (varB != null) { result.Add(varB.ToList()); }
                    var varC = multi.Read<C>();
                    if (varC != null) { result.Add(varC.ToList()); }
                    var varD = multi.Read<D>();
                    if (varD != null) { result.Add(varD.ToList()); }
                    var varE = multi.Read<E>();
                    if (varE != null) { result.Add(varE.ToList()); }
                    var varF = multi.Read<F>();
                    if (varF != null) { result.Add(varF.ToList()); }
                    var varG = multi.Read<G>();
                    if (varG != null) { result.Add(varG.ToList()); }
                    var varH = multi.Read<H>();
                    if (varH != null) { result.Add(varH.ToList()); }
                    var varI = multi.Read<I>();
                    if (varI != null) { result.Add(varI.ToList()); }
                    var varJ = multi.Read<J>();
                    if (varJ != null) { result.Add(varJ.ToList()); }

                    //if (varA != null) { result.Add(varA.ToList()); }
                    //if (resultSets > 1) { result.Add(multi.Read<B>().ToList()); }
                    //if (resultSets > 2) { result.Add(multi.Read<C>().ToList()); }
                    //if (resultSets > 3) { result.Add(multi.Read<D>().ToList()); }
                    //if (resultSets > 4) { result.Add(multi.Read<E>().ToList()); }
                    //if (resultSets > 5) { result.Add(multi.Read<F>().ToList()); }
                    //if (resultSets > 6) { result.Add(multi.Read<G>().ToList()); }
                    //if (resultSets > 7) { result.Add(multi.Read<H>().ToList()); }
                    //if (resultSets > 8) { result.Add(multi.Read<I>().ToList()); }
                    //if (resultSets > 9) { result.Add(multi.Read<J>().ToList()); }    
                    return result;
                }
            }
            catch (System.Exception e)
            {
                string message = e.Message;
            }
        }

        return result;
    }

Upvotes: -3

Related Questions