Also, ich bekomme den Fehler nach meiner Titelzeile. Scheint ziemlich selbsterklärend, aber mein Verständnis ist, dass Objekte innerhalb des "using" Blocks entsorgt werden? Dieser Fehler ist aufgetreten, nachdem ein anderer kleiner Fehler die Codeausführung unterbrochen hat. Vielleicht bin ich also mit einem offenen Reader fest, den ich schließen oder herunterfahren muss? Jede Hilfe wäre willkommen?C#/SQL Server-Fehler 'Diesem Befehl ist bereits ein offener DataReader zugeordnet, der zuerst geschlossen werden muss.'
Antwort
Ich glaube nicht, dass der Code, den Sie gezeigt haben, die Ursache des Problems ist. Während es üblich ist, SqlCommand
(IDbCommand
) Objekte zu entsorgen, habe ich es in der Praxis nicht für notwendig erachtet. Was ist notwendig ist, um SqlDataReader
(IDataReader
) Objekte zu entsorgen, nachdem Sie sie verwendet haben. Suchen Sie in der Fehlermeldung nach einer Verwendung eines SqlDataReader
Objekts in Ihrem Code, das nicht entsorgt wird. Die Ausnahme wird möglicherweise aus dem angezeigten Code ausgelöst, aber ich vermute, dass die Ursache darin liegt, dass SqlDataReader
demselben SqlConnection
zugeordnet ist, der früher in der Programmausführung verwendet wurde und nicht entsorgt wurde.
Du hast Recht. Vielen Dank. Ich fand eine offene Referenz von über 40, von der ich nicht dachte, dass sie angerufen wurde. – StatsViaCsh
Ein Problem mit der using-Klausel ist, dass es keine Möglichkeit bietet, Ausnahmen im impliziten try/finally-Block zu verarbeiten, den der Compiler für Sie generiert.
Sie können 1) wickeln Sie Ihre mit einem try/catch mit Klausel oder 2) Code manuell einen try/catch/finally anstelle der Verwendung, den Aufruf von Dispose im finally-Block und das Hinzufügen von Ausnahmebehandlung in einem catch-Block.
Es gibt leichte Nachteile zu jeder Technik, aber entweder funktioniert
Danke für die robustere Implementierungsidee .. – StatsViaCsh
Sie können MARS (mehrere aktive Resultsets), um Ihre Verbindungszeichenfolge hinzufügen, mehrere Datensatzgruppe (oder ähnlich) offen zugleich zu ermöglichen.
MultipleActiveResultSets=true;
oder
MARS Connection=True;
zu Verbindungszeichenfolge (http://www.connectionstrings.com/sql-server-2008) hinzufügen und diese mehrere Griffe erlauben, aber wenn Die vorherige Operation wurde in einer Ausnahme "unterbrochen". Versuchen Sie, "USING" zu vermeiden oder verwenden Sie einen try/catch.
- 1. C#: Es gibt bereits eine offene Datareader mit diesem Befehl zugeordnet, der zuerst geschlossen werden muss
- 2. EntityFramework Es gibt bereits eine offene Datareader mit diesem Befehl zugeordnet, der zuerst geschlossen werden muss
- 3. Fehler beim Aufruf eines anderen Repos - 'Es ist bereits ein offener DataReader mit diesem Befehl verbunden, der zuerst geschlossen werden muss'
- 4. EF 4.1/Repository/UnitOfWork/MySQL: Es ist bereits ein offener DataReader mit dieser Verbindung verbunden, der zuerst geschlossen werden muss
- 5. Multithreading Fehler: Es gibt bereits eine offene Datareader dieser Verbindung zugeordnet, die zuerst geschlossen werden muss
- 6. ADO.Net DataReader-Fehler: Bereits ein Open DataReader
- 7. Warum erhalte ich den Fehler "Es ist bereits ein offener Datenleser vorhanden, der zuerst geschlossen werden muss"?
- 8. wenn mehrere SQL-Befehle zeigt Fehler setzen: Es gibt bereits eine offene Datareader mit diesem Befehl zugeordnet, der zuerst
- 9. Ein offener Datenleser
- 10. Muss HttpWebRequest geschlossen werden? Wie
- 11. Sql Datenreader bereits zugeordnet Hochfrequenz-Polling
- 12. mysql vb.net Es ist bereits ein Open Data Reader mit dieser Verbindung zugeordnet
- 13. Elasticsearch - transllog ist bereits geschlossen
- 14. Alfresco: Stream ist bereits geschlossen
- 15. psycopg2: Cursor bereits geschlossen
- 16. Verbindung bereits geschlossen
- 17. java.sql.SQLException: Bereits geschlossen
- 18. Jenkins Issue: hudson.remoting.ChannelClosedException: Kanal ist bereits geschlossen
- 19. Assembly: Muss xadd Befehl gesperrt werden?
- 20. Grails - PooledConnection wurde bereits geschlossen
- 21. Android SQL-Datenbank bereits geschlossen Fehler
- 22. Was ist falsch mit diesem Befehl einfügen?
- 23. const Referenz kann ein int zugeordnet werden?
- 24. Was ist das "-" in diesem Befehl xargs Befehl
- 25. PyMySQL werfen "pymysql.err.Error: Bereits geschlossen"
- 26. Muss eine Psycopg2-Verbindung am Ende eines Skripts geschlossen werden?
- 27. Warum muss ich zuerst super-dealloc aufrufen, und nicht zuerst?
- 28. Ein Codility-Test, der gelöst werden muss
- 29. Warum Datenbankverbindungen sind in diesem Fall geschlossen
- 30. Kann ein Wörterbuchwert einer Funktion zugeordnet werden?
Ist es reproduzierbar oder ist es nur einmal passiert, als Sie debuggten? –
@Bryan Ich habe es bei dem Fehler gestoppt, Rerunning, gleichen Fehler. Ich habe versucht, während cmd.Dispose, ohne Erfolg zu debuggen. – StatsViaCsh
Machst du etwas anderes mit 'this.sqlConnection' woanders, die das beeinflussen könnte? Es klingt wie ein anderes Befehlsobjekt an einem anderen Ort in Ihrem Code, der dieselbe 'SqlConnection' verwenden könnte und noch nicht geschlossen wurde. –