Wiederverwendung von SqlConnection und SqlDataReader

8

Wenn ich mehrere SELECT-Abfragen in verschiedenen Tabellen ausführen möchte, kann ich für alle denselben SqlDataReader und SqlConnection verwenden? Wäre das folgende weise? (Ich tippte das schnell ein, also fehlt es an Versuch / Fang):

%Vor%

Vielen Dank.

    
PaulG 13.04.2012, 19:17
quelle

2 Antworten

20

Sie können dieselbe Verbindung für jede von ihnen verwenden, solange Sie nicht versuchen, mehrere Abfragen gleichzeitig auf derselben Verbindung von verschiedenen Threads auszuführen.

Was den Datenleser betrifft, verwenden Sie den Reader nicht wirklich neu. Jeder Aufruf von ExecuteReader gibt eine neue Instanz eines neuen Readers zurück. Sie verwenden nur die Variable, die den Verweis auf den Reader beibehält . Hier liegt ein Problem, Sie schließen nur explizit den letzten Leser und lassen den ersten zu einem späteren Zeitpunkt GC'd.

Sie können den Befehl auch wiederverwenden, aber denken Sie daran, wenn Sie Parameter usw. angeben, müssen Sie sie für die nächste Abfrage löschen, es sei denn, sie gelten auch für die nächste Abfrage.

Sie sollten try/finally blocks verwenden, um sicherzustellen, dass Sie die Ressourcen bereinigen, oder hier ist eine kurze Änderung an Ihrem Code, um using -Anweisungen zu verwenden, um eine Ressourcenbereinigung zu gewährleisten, selbst wenn eine Ausnahme den Rest verhindert des Codes aus der Ausführung.

%Vor%

Hinweis: GetTheConnection ist nur eine Platzhalterfunktion für jeden Mechanismus, den Sie zum Abrufen Ihrer Verbindungsinstanz verwenden.

    
Chris Taylor 13.04.2012, 19:22
quelle
2

Ich benutze im Allgemeinen Adapter, so dass ich in den Details des Lesers verrostet bin, aber ich denke, dass Sie auf dem richtigen Weg sind.

Eine Anmerkung in Ihrem Code ist, dass jeder Aufruf von ExecuteReader einen neuen Datenleser generieren sollte. Möglicherweise verwenden Sie den Variablennamen erneut, aber der Verweis auf den vorhandenen Reader wird verworfen und bei jedem Aufruf durch einen neuen ersetzt. Schließen Sie den vorherigen Reader, bevor Sie ExecuteReader verwenden, um einen neuen Reader zu erhalten.

    
Rozwel 13.04.2012 19:29
quelle

Tags und Links