Prbleme mit Socket und ODBC
-
Hallöchen,
vielleicht hat jemand mal dasselbe Problem gehabt und kann mir eventuell weiter helfen.Um auf den Punkt zu kommen muss ich etwas weiter ausholen. Ich habe eine Anwendung welche einen Socket öffnet StatusNachrichten überträgt außerdem werden diverse Datenbank Abfragen getätigt(via ODBC). Der Socket hat also nicht mit den Datenbank Abfragen zu tun. Diese Abarbeitung kann Manuel über eine Button angestoßen werden oder auch Automatisiert in eine Art schleife.
Wenn ich es Manuel anstoße kann ich es so oft machen wie ich will mach ich es Automatisiert kommt nach dem 5mal immer wieder zu Fehlern bei der ODBC Verbindung „Netzwerkverbindung nicht mehr verfügbar“, „Insert SQL failed“.Anfangs dachte ich es liegt an einer SQL Abfrage hab mich x mal durch den Code gewälzt und das Problem nicht beheben können. Irgendwann hab dann die ganze Socket Geschichte entfernt und siehe da es läuft tadellos aber sowie die Socket Kommunikation wieder mit drin ist kommt es nach dem 5 durchlauf wieder zu diesem Fehler.
Halb am verzweifeln bin ich den Code für den Socket durchgegangen in der Hoffnung was zu finden aber Erfolglos.
Daraufhin hab ich mir eine Anwendung geschrieben welche einfach nur den Socket öffnet und dann wieder schließt.
Auch hier wenn ich es Manuel mit Hilfe des Buttons wiederhole funktioniert es tadellos mach ich eine Schleife um die Funktion, funktioniert es einmal und dann nicht wieder.
Habe mal die Anwendung mit Angehangen vielleicht hat jemand mal einen Moment sich das ganze anzuschauen. Wäre echt dankbar dafür.Hier der Link
http://rapidshare.com/files/383385969/ODBCErrorTestApp.zip.html
-
Ich habe mir Deinen Code nicht angesehen. Ich tippe mal ins Blaue:
Nicht alle ODBC Driver sind threadsicher.
Du hast wahrscheinlich für den Socket I/O einen eigenen Thread und benutzt über thread-grenzen hinweg das ODBC Interface.
Das kann schwer ins Augegehen.
-
Danke schon mal für deine Antwort ich benutze den SQL Server Treiber von Microsoft Version 2000.85.1117.00 ich geh ja mal davon aus das dieser Thread sicher ist.
-
Davi_Ilm schrieb:
Danke schon mal für deine Antwort ich benutze den SQL Server Treiber von Microsoft Version 2000.85.1117.00 ich geh ja mal davon aus das dieser Thread sicher ist.
Nur mal so als Bermerkung aus der Vergangenheit:
•If a Microsoft ODBC Driver for SQL Server connection is being shared by multiple threads, the connection may fail, returning the error message "Connection is busy with results for another hstmt". In some cases, this affects packages built with the DTS Import/Export wizard. Use one of the following approaches to address this problem:
•Set the MaxConcurrentSteps property to 1 to eliminate contending threads.
•Create additional ODBC connections to eliminate connection sharing.
•Use the Microsoft OLE DB Provider for SQL Server (SQLOLEDB) to connect to the database.Ich würde aher Nachrichten an den Mainthread senden, der dann den DB I/O durchführt. Oder ich würde je Thread einen Connect aufbauen...
-
Danke schon mal für die Antworten.
Hier sind mal noch die beiden Meldungen ins Detail:
--------------------
TCP-Provider: Die Anwendung hat die Funktion WSAStartup nicht aufgerufen, oder bei dieser Funktion ist ein Fehler aufgetreten.Was mich sehr verwundert ist das dieser Fehler immer genau beim 7. Durchlauf auftaucht.
Kommunikationsverbindungsfehler
State:08S01,Native:10093,Origin:[Microsoft][SQL Native Client]
--------------------
TCP-Provider: Der angegeben Netzwerkname ist nicht mehr verfügbar.
Kommunikationsverbindungsfehler
State:08S01,Native:64,Origin:[Microsoft][SQL Native Client]
--------------------