verwendetes Datenbanksystem: MsSql 2005 Express
Hallo, ich habe ein "kleines" Problem
ich habe eine Anwendung programmiert, die auf einen SQL Server (Express) zugreift.
Bei jeder Methode dich ich aufrufe (die auch mit dem Server arbeitet) Prüfe ich ob mein Sql Objekt die Verbindung zum Server geöffnet ist.
Wenn ich nun das Netzwerkkabel ziehe, dann tritt eine Exception auf. Soweit alles Ok.
Diese Exception protokolliere ich, und schließe dann mein SQl objekt (=null).
jetzt erstelle ich dieses Objekt neu, und öffne die Verbindung. Wenn ich aber jetzt eine Abfrage (mittel Datareader) mache, bekomme ich die Meldung
Fehler auf Übertragungsebene beim Senden der Anforderung an den Server. (provider: TCP-Provider, error: 0 - Eine vorhandene Verbindung wurde vom Remotehost geschlossen.)
Aber mein Objekt für die SqlVerbindung ist geöffnet.
Woran liegt das?
Gruß Simon
Hallo Simon,
Du solltest so programmieren dass eine Connection nur ganz kurz geöffnet und gleich wieder geschlossen wird.
Es gibt schon viele Beiträge dazu hier im Forum.
Dann kannst Du dein Netzwerkkabel so oft rausziehen wie Du willst.
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
Gibt es keine andere Lösung hierfür?
Ist das denn ein Fehler vom Server?
Wenn ich meine Verbindung schließe, und eine neue Aufbaue, dann ist die alte Connection doch weg. und wenn mein Objekt sage ConnectionState = Open dann sollte man doch damit arbeiten können.
Gibt es keine andere Lösung hierfür?
Nein, Du musst schon richtig programmieren. Oder Dein Netzwerkkabel nicht raussziehen.
Ist das denn ein Fehler vom Server?
Nein, es ist ein Fehler in Deiner Programmierung.
So, ich habe mal für Dich die Suchfunktion des Forums benutzt :
[Artikel] Ressourcen schonen - Datenbanken richtig öffnen und schließen
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
Hallo Grimmbizkit,
oder noch einmal BerndFFm's Worte anders ausgedrückt:
Bei Netzwerkressourcen muss immer so programmiert werden, dass plötzliche Verbindungsabbrüche (wie z.B. Entfernen des Kabels) nicht zu Abstürzen des Programms führen.
Also immer schön Try-Catches um die Netzwerkfunktionalität und nicht an einer gewissen Intelligenz sparen, um im Fehlerfall das Programm weiterhin lauffähig zu halten 😉
Grüße
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
Wenn ich meine Verbindung schließe, und eine neue Aufbaue, dann ist die alte Connection doch weg.
nein. sie ist nur wieder im connectionpool. wenn du wieder ein "open" machst, bekommst du die selbe wieder (wenn sie in der zwischenzeit nciht unterbrochen wurde aber in dem fall wird dann eine neue angelegt)
Kann man denn irgendwie diesen diese Verbindungen in dem Pool Schließen oder so?
Hallo Simon,
Beispiele für das Lesen, Ändern und Einfügen von Daten in der Datenbank :
http://www.seven-c.de/files/datenbankenhowto.htm
Und immer dran denken :
Jedes conn.Open() in einem try-Zweig.
Immer schön conn.Close(), oder using.
Möglichst wenig Befehle zwischen conn.Open und conn.Close.
Grüße Bernd
PS.: Ich hab mein "Datenbanken-How-To" mal aktualisiert. Wird aber später noch schöner werden 😉
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3