Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como faço para retornar vários conjuntos de resultados com SqlCommand?


Consulte SqlDataReader.NextResult (um SqlDataReader é retornado ao chamar SqlCommand.ExecuteReader):

Avança o leitor de dados para o próximo resultado [conjunto], ao ler os resultados de instruções Transact-SQL em lote.

Exemplo:
string commandText = @"SELECT Id, ContactId
FROM dbo.Subscriptions;

SELECT Id, [Name]
FROM dbo.Contacts;";


List<Subscription> subscriptions = new List<Subscription>();
List<Contact> contacts = new List<Contact>();

using (SqlConnection dbConnection = new SqlConnection(@"Data Source=server;Database=database;Integrated Security=true;"))
{
    dbConnection.Open();
    using (SqlCommand dbCommand = dbConnection.CreateCommand())
    {
        dbCommand.CommandText = commandText;
        using(SqlDataReader reader = dbCommand.ExecuteReader())
        {
            while(reader.Read())
            {
                subscriptions.Add(new Subscription()
                {
                    Id = (int)reader["Id"],
                    ContactId = (int)reader["ContactId"]
                });
            }

            // this advances to the next resultset 
            reader.NextResult();

            while(reader.Read())
            {
                contacts.Add(new Contact()
                {
                    Id = (int)reader["Id"],
                    Name = (string)reader["Name"]
                });
            }
        }
    }
}

Outros exemplos:
  • Conjuntos de resultados múltiplos em C#
  • Executando uma consulta que retorna vários conjuntos de resultados com SqlDataReader :SqlCommand Select « ADO.Net « C# / CSharp Tutorial