Fragensteller
Problem beim Zugriff auf SQL Server

Frage
-
Hallo @all,wir greifen aus c# per ADO.NET auf einen SQL Server 2008 R2 (10.50.4000) zu.Dabei haben wir sporadisch folgende Probleme1. Bei einem Insert kommen nicht alle Daten in der Datenbank an, es stehen null Werte in diesen Spalten2. Bei Selects kommt es zu Fehlern spalte xyz ist nicht in der Tabelle enthalten, obwohl diese Spalte eindeutig enthalten istWir sind zu Zeit mit unserem Latein am Ende. Gerade der 1. Fehler treibt uns zum Wahn...Wir sind sogar schon so weit gegangen, dass nach dem Insert geprüft wird ob die Daten auch in der Tabelle stehen, da scheint alles ok zu sein (für den c# code) aber die Daten stehen nicht in der DB.Das Problem tritt nicht immer auf, wir vermuten dass es was mit der Auslastung des SQL Servers zu tun hat.Wenn der Server einen Fehler werfen würde, dann würde ich das ja verstehen, aber wir bekommen keinen Fehler zurück, die Daten passen aber nicht.hat jemand eine Idee wo wir ansetzen könnten?GrüßeJörg
Jörg Schneider
Alle Antworten
-
Hallo Jörg,
zuerst würde ich mal das SP 3 für SQL Server 2008 R2 installieren, damit man sicherstellen kann, dass es nicht am SQL Server selbst liegt.
Dein Problem hört sich ähnlich an wie eines, dass ich mal vor vielen vielen Jahren hatte. Daher die Frage:
Verwendest Du irgendwo statische Klassen, Eigenschaften und/oder Methoden für deine Datenbankzugriffe? Falls ja, welche Art von Anwendung erstellst Du? ASP.NET? Falls nicht, wird die Anwendung mit mehreren Instanzen gestartet bzw. von mehreren anderen Anwendungen aus angesprochen? (Bspw. wenn deine Anwendung Client/Server basiert ist)
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo Stefan,Nein wir nutzen keine Statischen Klassen. Sind alles Instantiierte Klassen, die aber teilweise die komplette Anwendungslaufzeit über leben. Die Connections werden allerdings vor dem Gebrauch aufgebaut und danach wieder weggeworfen (disposed).Wir haben einen Windows-Service mit c#. Der wird nicht von außen angesprochen sondern liest die Daten aus der Datenbank und schaufelt die auf den Exchange-Server und umgekehrt. Aber alles ohne externe Einflüsse.Der Dienst in sich arbeitet aber Asynchron. Greift also aus mehreren Threads auf die Datenbank zu. Jeweils aber wiederum über eine eigene Connection.Am 15.12.2015 um 13:16 schrieb Stefan Falz [MVP]:> Hallo Jörg,>> zuerst würde ich mal das SP 3 für SQL Server 2008 R2 installieren, damit man sicherstellen kann, dass es nicht am SQL Server selbst liegt.>> Dein Problem hört sich ähnlich an wie eines, dass ich mal vor vielen vielen Jahren hatte. Daher die Frage:>> Verwendest Du irgendwo statische Klassen, Eigenschaften und/oder Methoden für deine Datenbankzugriffe? Falls ja, welche Art von Anwendung erstellst Du? ASP.NET? Falls nicht, wird die Anwendung mit mehreren Instanzen gestartet bzw. von mehreren anderen Anwendungen aus angesprochen? (Bspw. wenn deine Anwendung Client/Server basiert ist)>
-
Hallo Jörg,
ich gehe stark davon aus, dass das Problem dennoch genau das ist, dass ich vermute.
Durch die verschiedenen Threads schmeißt ihr an irgendeiner Stelle bspw. die SqlCommand Objekte durcheinander. Für dich ist das nicht ersichtlich aber eine Meldung, dass eine Spalte XY nicht existiert, obwohl Du 100%ig sicher bist, dass Tabelle A diese Spalte(n) enthält, kann eigentlich nichts anderes sein.
Das Problem an sich ist wahrscheinlich, dass irgendwo doch eine statische Eigenschaft oder Methode verwendet wird oder doch eben nicht alle Objekte korrekt für diesen einen Aufruf instanziert wurden. Das Problem dabei ist dann bspw. dass Thread 1 über ein SqlCommand Objekt mit "SELECT SpalteA FROM TabelleA" Daten aus TabelleA auslesen will, zeitgleich Thread 2 mit "SELECT SpalteB FROM TabelleB" eben Daten aus TabelleB.
Und wenn nun das SqlCommand für A gerade abgearbeitet wird und innerhalb dieser Zeit das SqlCommand Objekt für den Abruf B geändert wird, kommt es genau zu dem von dir festgestellten Effekt.
Poste doch mal den relevanten Code, dann kann man sich das besser anschauen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo Stefan,das mit dem relevanten Code ist nicht so einfach.Das wäre ne komplette Solution mit nem Dutzend Klassen und Codezeilen.Das command-objekt ist auch nochmal gewrappt, und es sind generell viele Sonderlocken drin.(Wir können zwischen zwei DB Systemen (SQL Server und DBF Files) umschalten...)Wir vermuten das das Problem eher am Backend liegt?!Wir haben mehrere Kunden bei denen das Problem nicht auftritt, deshalb gehen wir von einem Konfigurationsproblem aus.Was meinst Du dazu?GrüßeJörg SchneiderAm 16.12.2015 um 10:55 schrieb Stefan Falz [MVP]:> Hallo Jörg,>> ich gehe stark davon aus, dass das Problem dennoch genau das ist, dass ich vermute.>> Durch die verschiedenen Threads schmeißt ihr an irgendeiner Stelle bspw. die SqlCommand Objekte durcheinander. Für dich ist das nicht ersichtlich aber eine Meldung, dass eine Spalte XY nicht existiert, obwohl Du 100%ig sicher bist, dass Tabelle A diese Spalte(n) enthält, kann eigentlich nichts anderes sein.>> Das Problem an sich ist wahrscheinlich, dass irgendwo doch eine statische Eigenschaft oder Methode verwendet wird oder doch eben nicht alle Objekte korrekt für diesen einen Aufruf instanziert wurden. Das Problem dabei ist dann bspw. dass Thread 1 über ein SqlCommand Objekt mit "SELECT SpalteA FROM TabelleA" Daten aus TabelleA auslesen will, zeitgleich Thread 2 mit "SELECT SpalteB FROM TabelleB" eben Daten aus TabelleB.>> Und wenn nun das SqlCommand für A gerade abgearbeitet wird und innerhalb dieser Zeit das SqlCommand Objekt für den Abruf B geändert wird, kommt es genau zu dem von dir festgestellten Effekt.>> Poste doch mal den relevanten Code, dann kann man sich das besser anschauen.>> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------>> Gruß, Stefan> Microsoft MVP - Visual Developer ASP/ASP.NET> http://www.asp-solutions.de/ - Consulting, Development> http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community>> -----> ----->