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ń?

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 ''


21

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


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.