MultipleActiveResultSets = Echte oder mehrere Verbindungen?

85

Ich habe ein C #, in dem ich einen Reader für eine Verbindung ( ExecuteReader) erstelle, und führe dann für jede Zeile in diesem Reader einen anderen Befehl (mit ExecuteNonQuery) aus. Ist es in diesem Fall besser, wenn ich MultipleActiveResultSets=Truemeine Verbindung verwende oder mehrere Verbindungen verwende?

Sprintstar
quelle

Antworten:

98

Speziell für diese Art von Operation wurden mehrere aktive Ergebnismengen (MARS) hinzugefügt, sodass nicht zwei Verbindungen gleichzeitig geöffnet sein müssen, um aus einem SqlDataReader lesen und zusätzliche Stapel ausführen zu können.

MARS ist kompatibel mit SQL Server 2005 und höher. So zitieren Sie aus MSDN-Dokumenten:

Vor der Einführung von MARS (Multiple Active Result Sets) mussten Entwickler entweder mehrere Verbindungen oder serverseitige Cursor verwenden, um bestimmte Szenarien zu lösen.

Weitere Informationen finden Sie unter:

MSDN Library - MARS Übersicht

Beispiel für das Lesen und Aktualisieren von Daten:

MSDN Library - Manipulieren von Daten (MARS) Scrollen Sie nach unten zu "Lesen und Aktualisieren von Daten mit MARS".

Kev
quelle
21

Soweit ich weiß, wurde MARS hinzugefügt. Ich denke, Sie sollten es verwenden.

Rune Grimstad
quelle
0

Der beste Weg, dies zu testen, besteht darin, SQLServer Profiler zu starten und zu sehen, was wirklich auf der Serverseite passiert.

Ich vermute, dass es nicht besser sein wird, da Sie ExecuteNonQuery () verwenden. Sie arbeiten also nicht mit mehreren Ergebnissen.

dmajkic
quelle
6
Das habe ich mir gedacht, als ich den Code geschrieben habe, aber wenn ich nicht über MultipleActiveResultSets = True verfüge, wird immer noch angezeigt, dass diesem Befehl bereits ein offener DataReader zugeordnet ist, der zuerst geschlossen werden muss. Ausnahme bei ExecuteNonQuery.
Sprintstar