03-01-2020, 03:33 PM
(02-01-2020, 11:53 AM)DevOma Wrote: Wenn es alle hätten, wäre das Problem wohl auch leicht zu finden - das Blöde ist, das wir es nicht nachstellen können und das macht es schwierig...
Damit ihr es nicht so schwierig habt, habe ich mir mal die Mühe gemacht und mir euer Programm von Source Code Seite her angeschaut,
vor allem die Klasse CloudAdminDataAccess.SqlDataAccessor, die in den Fehlermeldungen auftaucht.
Es wird nur eine Instanz von SqlConnection verwendet, aber nicht sichergestellt, dass auf der Klasse immer nur ein Thread gleichzeitig Methoden aufrufen kann.
- Warum werden nicht mehrere SqlConnection Instanzen verwendet? ADO.NET nutzt Pooling, um Verbindungen schnell wieder zuverwenden.
- Wenn ein SqlDataReader angefragt hat, meldet die SqlConnection trotzdem den Status Open, was dazu führt, dass die SqlConnection wiederverwendet wird, obwohl diese noch in Verwendung ist.
- Es scheint, als ob diese Single Instanz Variante als Notlösung wg. der Transaction Unterstützung gemacht worden wäre.
Wenn dem so ist, wäre es sinnvoller, eventuell alles anders mit Unterstützung der TransactionScope Klasse zu implementieren
- Es wird nicht geprüft, ob eine Connection existiert (not null), bevor m_Connection.BeginTransaction() aufgerufen wird
- Im Fehlerfall bleibt die Variable m_ActiveTransaction auf true, obwohl keine Transaction vorliegt
Viele Grüße
Markus