Gibt es eine Möglichkeit, offene Leser auf einer SqlConnection zu erkennen?

8

Ich erhalte den Fehler "Neue Transaktion ist nicht erlaubt, da andere Threads ausgeführt werden" in einer Anwendung, an der ich gerade arbeite. Es ist während des Refactorings und speziell während der Erstellung einer Testsuite entstanden.

Wenn ich mich umsehe, merke ich, dass ich wahrscheinlich noch einen Datenleser geöffnet habe, wenn ich die Transaktion erstelle, aber es ist eine komplexe App und mir ist nicht klar, wo das Problem liegt. Daher möchte ich herausfinden können, welche Leser mit der fraglichen SqlConnection verbunden sind.

Idealerweise möchte ich eine Uhr in Visual Studio hinzufügen und dann im Debug-Modus durchgehen, um zu sehen, wann sich die Anzahl der angeschlossenen Leser ändert.

Gibt es eine Möglichkeit, dies zu tun? Ich arbeite in C #.

Vielen Dank im Voraus.

Martin

    
marsbard 28.10.2010, 13:08
quelle

2 Antworten

7

Puh! Nun, ich weiß jetzt viel mehr über Reflektion!

Für alle anderen, die nach der Antwort suchen, gibt es hier eine Methode, die die Anzahl der Datenleser in einer SqlConnection zurückgibt.

%Vor%

Interessanterweise deutet die Verwendung dieses Codes in meinem Problemcode darauf hin, dass auf der Verbindung keine Datenlesegeräte geöffnet sind, wenn der Fehler "Neue Transaktion ist nicht erlaubt, weil andere Threads ausgeführt werden" auf das Zeichenbrett (oder mindestens ein anderes) zurückgeht SO Frage) damit.

    
marsbard 28.10.2010, 16:10
quelle
1

Sie finden vielleicht thread von Interesse.

Bearbeiten: Sieht so aus, als ob sie bei DbConnectionInternal mit Reflektor gelandet sind, und eine kostenlose Version ist verfügbar. Was die Reflexion angeht, ist es nicht wirklich kompliziert. Es gibt einen guten Überblick über MSDN .

Edit2: Habe gerade gemerkt, dass du es schon herausgefunden hast. Groß. :) Ich werde die Bearbeitung verlassen, falls jemand anderes mehr Informationen haben möchte.

    
dandan78 28.10.2010 13:36
quelle

Tags und Links