Laden...

Diesem Befehl ist bereits ein geöffneter DataReader zugeordnet, der zuerst geschlossen werden muss

Erstellt von neri vor 16 Jahren Letzter Beitrag vor 16 Jahren 13.300 Views
N
neri Themenstarter:in
60 Beiträge seit 2004
vor 16 Jahren
Diesem Befehl ist bereits ein geöffneter DataReader zugeordnet, der zuerst geschlossen werden muss

So, also ich hab öfters mal das Problem, dass wenn ich mein Prog schließe und wieder öffne diese Meldung kommt. Allerdings geht die auch "irgendwie" wieder weg.

Nun ist das 1. nicht das gelbe vom Ei und 2. ist es im Moment so, dass die Meldung, da Released, jedesmal beim Starten des Programms kommt.

Es sind auch keine Prozesse mehr übrig vom Programm.

Was kann ich machen?

Bitte um HIlfe!!

915 Beiträge seit 2006
vor 16 Jahren

Denk dran:



using (SqlDataAdapter _da = new SqlDataAdapter(<SQLQuery>, <SQLConnection>))
{
   try
   {
          _da.Update(<DataTable>);
   }
   finally
   {
          // das closen nicht vergessen!
         _da.Close();
   }
}

Das Update war nur nen Beispiel, weil es hier oftmals vergessen wird.

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

3.511 Beiträge seit 2005
vor 16 Jahren

Ehrlich gesagt kein gelungenes Beispiel. SqlDataAdapter hat kein Close.

Ebenso wäre ein Close auch nicht nötig, da das Dispose bei allen Sql... Klassen ein Close aufruft. Und ein using ruft ein Dispose auf...

@neri:
Hab ich das richtig verstanden, das die Meldung nur im Release-Modus kommt? Kannst du die Stelle debuggen?

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

N
neri Themenstarter:in
60 Beiträge seit 2004
vor 16 Jahren

also, ich weiß nicht was es war. ich habe jetzt einen destruktor meiner hauptklasse hinzugefügt und dort mal sicherheitshalber alles was es zu schließen geben könnte geschlossen.

das noch mal released und ausgeliefert und siehe da es funktioniert.

ich kann mir nicht ganz vorstellen dass es der destruktor war, denn der fehler war gleich weg, nachdem ich das alte release mit einem neuen überschrieben habe.

vielleicht hat aber auch der gc zugeschlagen und mir meinen datareader zugemacht? kanns das sein?

915 Beiträge seit 2006
vor 16 Jahren

Ehrlich gesagt kein gelungenes Beispiel. SqlDataAdapter hat kein Close.

Ebenso wäre ein Close auch nicht nötig, da das Dispose bei allen Sql... Klassen ein Close aufruft. Und ein using ruft ein Dispose auf...

Ups.. habs schnell aus den Kopf rausgekritzelt. Warum ich das Close reingemacht habe weis ich ehrlich gesagt selbst nicht, wollte es ja via Using aufzeigen das es automatisch wieder geschlossen wird (IDisposable).

@neri
Deine Datenbankverbindung war noch offen, du hattest via DataReader eine Tabelle geöffnet und via DataSet oder DataTable irgendwas gemacht und vergessen danach die Verbindung zu schließen. Darum ging es erst wieder nach dem Beenden des Programms. Da beim Debuggen nicht die Probleme hattest, liegt schlicht daran das dass Debuggen nach dem Test des Aufrufes beendet hast. Somit wird auch die DB Connection geschlossen.

Mein Beispiel war etwas blöde..Hatte es nur runtergetippt.
Möchte mich dafür entschuldigen und hätte es lieber gleich in Worte fassen sollen.

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

F
10.010 Beiträge seit 2004
vor 16 Jahren

@neri:
Benutzt du tatsächlich destruktoren?

Da solltest Du dann aber mal schnellstens etwas über IDisposable und destructoren in .NET nachlesen.

184 Beiträge seit 2005
vor 16 Jahren

Da die Fehlermeldung auch auftritt, wenn man einfach 2 reader parallel ausführen möchte, ist "MultipleActiveResultSets" noch zu erwähnen.
Im Connection string (SQL Server 2005) ein "MultipleActiveResultSets=true" dazu, dann müsste man mehrere reader parallel ausführen lassen können.

(Passt jetzt nich direkt zum Thema, hier ging es ja darum, dass nach Schließen des Projektes der Fehler aufgetreten ist... aber wenn jemand nach der Fehlermeldung sucht hat er womöglich das andere beschriebene Problem)

Gruß
Seyyedi

3.971 Beiträge seit 2006
vor 16 Jahren

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...