src/Invoke-MultipleQuery.psm1

using namespace Dapper
using namespace System.Data

<#
.SYNOPSIS
    Executes a parameterized SQL query that returns multiple result sets, and accesses each of them in turn.
.PARAMETER Connection
    The connection to the data source.
.PARAMETER Command
    The SQL query to be executed.
.PARAMETER Parameters
    The parameters of the SQL query.
.OUTPUTS
    A grid reader that can be used to iterate over the result sets of the SQL query.
#>

function Invoke-MultipleQuery {
    [CmdletBinding()]
    [OutputType([SqlMapper.GridReader])]
    param (
        [Parameter(Mandatory, Position = 0)]
        [IDbConnection] $Connection,

        [Parameter(Mandatory, Position = 1)]
        [string] $Command,

        [Parameter(Position = 2)]
        [ValidateNotNull()]
        [hashtable] $Parameters = @{}
    )

    $dynamicParameters = [DynamicParameters]::new()
    foreach ($key in $Parameters.Keys) { $dynamicParameters.Add($key, $Parameters.$key) }
    [SqlMapper]::QueryMultiple($Connection, $Command, $dynamicParameters)
}