MultipleActiveResultSets = True ou conexões múltiplas?

86

Eu tenho alguns C # em que crio um leitor em uma conexão ( ExecuteReader), em seguida, para cada linha nesse leitor, execute outro comando (com ExecuteNonQuery). Nesse caso, é melhor usar MultipleActiveResultSets=Truena minha conexão ou usar várias conexões?

Sprintstar
fonte

Respostas:

99

Multiple Active Result Sets (MARS) foi adicionado especificamente para este tipo de operação para que você não precise ter duas conexões abertas ao mesmo tempo para poder ler de um SqlDataReader E executar lotes adicionais.

MARS é compatível com SQL Server 2005 e superior. Para citar os documentos do MSDN:

Antes da introdução de Multiple Active Result Sets (MARS), os desenvolvedores tinham que usar várias conexões ou cursores do lado do servidor para resolver certos cenários.

Para obter mais informações, consulte:

Biblioteca MSDN - Visão Geral do MARS

Exemplo trabalhado de leitura e atualização de dados:

Biblioteca MSDN - Manipulando Dados (MARS) role para baixo até 'Lendo e Atualizando Dados com MARS'

Kev
fonte
21

Até onde eu sei, o MARS foi adicionado, então sim, acho que você deveria usá-lo.

Rune Grimstad
fonte
0

A melhor maneira de testar isso é disparar o SQLServer Profiler e ver o que realmente acontece no lado do servidor.

Meu palpite é que não será melhor, já que você está usando ExecuteNonQuery (). Então, na verdade, você não trabalha com resultados múltiplos.

dmajkic
fonte
6
Isso é o que eu pensei quando escrevi o código, mas se eu não tiver MultipleActiveResultSets = True, ainda recebo um "Já existe um DataReader aberto associado a este Comando que deve ser fechado primeiro." exceção em ExecuteNonQuery.
Sprintstar