+1 800 256 3608 (toll-free in North America) or +49 7531 9060-10| service@combit.com

Teilweise keine Daten

Hallo

Ich habe ein Problem mit mehreren Formularen. Ich habe eine kleine Konsolen Anwendung entwickelt, welche auf dem SQL-Server Daten abholt und diese dann drucken soll. Auf dem SQL-Server gibt es jeweils einen View welcher aufgerufen wird, damit die Daten bereits reduziert über mehrere Joins geladen werden können. Als Parameter gebe ich eine Auftragsnummer mit.

Nun ist es so, dass mit der gleichen Auftragsnummer teilweise Daten geladen werden und Teilweise nicht. Wie ich im SQL Profiler nachvollziehen konnte, führt L&L immer zwei Abfragen durch. Dabei klappt jeweils die erste und die zweite wird, beim Fall des leeren Druckes einfach nicht ausgeführt. Es ist der gleiche Aufruf, mal geht es mal nicht.

Ich sende euch die zwei Debwin Files, welche beim druck generiert werden. Einen Fehler habe ich darin nicht gefunden.

Debwin4_Leer.log4 (1.2 MB)
Debwin4_Normal.log4 (1.2 MB)

Weiter erhaltet Ihr noch das .trc File vom Microsoft Profiler (musste es für den Upload umbennen). Darin sieht man zuerst die Abfrage wenn dass Formular dann leer erscheint (erste 5 Zeilen), dann kommt eine Abfrage wo es ein DeadLock auf der DB gab (da kann L&L sicher nichts dafür) (Zeilen 8 -13) und noch die normale Abfrage (Zeile 14 - 19)

FehlerLLPrint.txt (11.0 KB)

Ich mache die Abfrage über ein DataSet realisiert, welche die Daten SqlCommand und SqlAdapter von C# lädt.

Habt ihr eine Idee wo das Problem liegen könnte bzw. was ich allenfalls noch zum debuggen probieren könnte?

Danke für die Unterstützung.

Gruss Aurelio Gisler

Passt nicht hierher, aber vielleicht ist die Lösung. Nimm keine Views, sondern Prozeduren mit Parametern und mach Deine where Klausel möglichst früh, damit der SQL-Server möglichst wenig Datensätze lockt. Mit dem View wird vermutlich die ganze Tabelle gelockt und so kommt es zum Deadlock.
Alternativ kannst Du in der Prozedur noch with (nolock) angeben, was aber wirklich nur die letzte Notlösung sein sollte.
Die SP kann Du dann mit CommdType.StoredProcedure einlesen.

Ansich hätte ich es gerne über Prozeduren gelöst, aber das ging nicht vom Dynamischen zusammenbau her. Die Where Parameter werden via xml-File an das Tool geschickt. Das geht leider von der Umgebung her nicht anders. Weiter ist ja nicht der Deadlock mein primäres Problem, sondern das, dass halt einmal Daten kommen und dann wieder nicht …

© combit GmbH