MultipleActiveResultSets = True czy wiele połączeń?

85

Mam trochę C #, w którym tworzę czytnik na connection ( ExecuteReader), a następnie dla każdego wiersza w tym czytniku wykonaj inne polecenie (z ExecuteNonQuery). Czy w takim przypadku lepiej jest używać MultipleActiveResultSets=Truena moim połączeniu, czy używać wielu połączeń?

Sprintstar
źródło

Odpowiedzi:

98

Wiele aktywnych zestawów wyników (MARS) zostało dodanych specjalnie dla tego typu operacji, dzięki czemu nie trzeba mieć otwartych dwóch połączeń w tym samym czasie, aby móc odczytać z SqlDataReader ORAZ wykonać dodatkowe partie.

MARS jest kompatybilny z SQL Server 2005 i nowszymi wersjami. Cytat z dokumentów MSDN:

Przed wprowadzeniem wielu aktywnych zestawów wyników (MARS) programiści musieli używać wielu połączeń lub kursorów po stronie serwera, aby rozwiązać pewne scenariusze.

Więcej informacji:

Biblioteka MSDN - przegląd MARS

Przykładowy odczyt i aktualizacja danych:

Biblioteka MSDN - Manipulating Data (MARS) przewiń w dół do `` Reading and Updating Data with MARS ''

Kev
źródło
21

O ile wiem, to jest powód dodania MARS, więc tak, myślę, że powinieneś go użyć.

Rune Grimstad
źródło
0

Najlepszym sposobem na przetestowanie tego jest uruchomienie programu SQLServer Profiler i sprawdzenie, co naprawdę dzieje się po stronie serwera.

Domyślam się, że nie będzie lepiej, ponieważ używasz funkcji ExecuteNonQuery (). Tak więc w rzeczywistości nie pracujesz z wieloma wynikami.

dmajkic
źródło
6
Tak właśnie myślałem, kiedy pisałem kod, ale jeśli nie mam MultipleActiveResultSets = True, nadal otrzymuję komunikat „Jest już otwarty DataReader powiązany z tym poleceniem, który musi zostać najpierw zamknięty”. wyjątek dotyczący ExecuteNonQuery.
Sprintstar