MultipleActiveResultSets = Vero o più connessioni?


86

Ho alcuni C # in cui creo un lettore su una connessione ( ExecuteReader), quindi per ogni riga in quel lettore, eseguo un altro comando (con ExecuteNonQuery). In questo caso è meglio che io usi MultipleActiveResultSets=Truesulla mia connessione o usi più connessioni?

Risposte:


99

Multiple Active Result Sets (MARS) è stato aggiunto specificamente per questo tipo di operazione in modo che non sia necessario avere due connessioni aperte contemporaneamente per poter leggere da un SqlDataReader ED eseguire batch aggiuntivi.

MARS è compatibile con SQL Server 2005 e versioni successive. Per citare dai documenti MSDN:

Prima dell'introduzione di MARS (Multiple Active Result Sets), gli sviluppatori dovevano utilizzare più connessioni o cursori lato server per risolvere determinati scenari.

Per maggiori informazioni vedere:

MSDN Library - Panoramica su MARS

Esempio di lavoro di lettura e aggiornamento dei dati:

MSDN Library - Manipolazione dei dati (MARS) scorri verso il basso fino a "Lettura e aggiornamento dei dati con MARS"


21

Questo è per quanto ne so il motivo per cui è stato aggiunto MARS, quindi sì, penso che dovresti usarlo.


0

Il modo migliore per verificarlo è attivare SQLServer Profiler e vedere cosa succede realmente sul lato server.

La mia ipotesi è che non sarà migliore poiché stai usando ExecuteNonQuery (). Quindi, in effetti, non lavori con più risultati.


6
Questo è quello che ho pensato quando ho scritto il codice, ma se non ho MultipleActiveResultSets = True, ricevo ancora un "C'è già un DataReader aperto associato a questo comando che deve essere chiuso per primo." eccezione su ExecuteNonQuery.
Sprintstar
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.