Benutzer mit den meisten Antworten
Datenbankverbindung zu MS SQL Server

Frage
-
Sehr geehrte Damen und Herrn,
ich entwickle gerade eine eigene Datenbankanwendung und bin ziemlich neu in diesem Gebiet.
Ich verwende Visual Studio 2010 mit C# und einen MS SQL Server 2008 R2 Express.
Ich habe einige Tutorials gelesen, wie man ganz einfach per Drag & Drop DataGridViews etc. in die Windows-Form ziehen kann
und VS pratisch alles von selbst macht.
Das DataSet habe ich mit dem Datenbank-assistent erstellt. Ich gehe mal davon aus, dass dafür ADO.NET verwendet wird.
Das Programm funktioniert auch schon soweit. nur stelle ich mir jetzt eine Frage: Und zwar wie das mit den Connections ist. Ich habe gelesen, dass die Connections immer geschlossen werden müssen. Da ich aber keine Zeile programmiert habe, die mit Connections zu tun hat, frage ich mich, ob Visual Studio für die korrekten Verbindungen sorgt, und diese auch wieder schließt. Also sodass ich nicht nach dem Rechten wegen der Verbindung schauen muss
Ich habe mal mit dem SQL Server Profiler aufgezeichnet. Es erscheinen ziemlich viele Logins und Logouts. jedoch komme ich beim Zählen manchmal zu dem Ergebnis, dass ein Login zuviel drin ist. Manchmal aber auch nicht. Ich rufe neben der Hauptform noch weitere Fenster auf, die auch DataGridviews enthalten. liegt das evtl. daran ?
Vielen Dank für Ihre Hilfe- Bearbeitet Felix86 Dienstag, 21. Februar 2012 10:17
Antworten
-
Hallo Felix,
beim Beenden der Anwendung sollten auch offene Verbindungen geschlossen werden.
U. U. kann das allerdings mit Verzögerung passieren, siehe u. a.:
Understand special TCP/IP property “Keep Alive” in SQL Server 2005Ein ordnungsgemässes Schliessen wäre allemale vorzuziehen.
Und eine Ausnahmebehandlung sollte bei Datenzugriffmethoden immer vorhanden sein.Gruß Elmar
- Als Antwort markiert Felix86 Donnerstag, 8. März 2012 15:15
Alle Antworten
-
Hallo Felix,
wenn Du Dir Dein DataSet "zusammengeklickt" hast so, verwendest Du typisierte DataSets mit TableAdaptern.
Die wiederum basieren auf den DataAdaptern, hier einem SqlDataAdapter.
Intern kümmen sich die DataAdapter darum, dass eine Verbindung bei Bedarf eröffnet und wieder geschlossen wird.ADO.NET nutzt dabei Connection Pooling, wenn man es nicht abschaltet,
d. h. es wird die gleiche Verbindung intern gepuffert und erneut genutzt.Wenn Du Dir das im Profiler angeschaut hast, sollte dort die gleiche SPID verwendet werden.
Weitere / mehrere Verbindungen würden nur genutzt, wenn Du parallele Abrufe durchführen würdest
(was aber via Designer nicht vorgesehen ist).Gruß Elmar
-
Hallo Elmar,
vielen Dank für die rasche Antwort.
Angenommen ich beende die Anwendung, werden dann nicht auch alle "noch offenen" Verbindungen (falls welche offen sein sollten, aus welchem Grund auch immer) durch den Garbage Collector beendet ?
Wie spielt denn da der MS SQL Server mit ? Er reserviert ja Ressourcen für die Verbindungen. Wenn jetzt Verbindungen nicht geschlossen werden würden (z.B. wenn die Anwendung beim Aufbau der Verbindung abstürzt und keinen Close-Befehl sendent), so bleiben diese Ressourcen auf dem Server vorhanden, was nicht gut ist. Löscht der Server diese Ressourcen irgendwann oder bleiben die bis zum Herunterfahren des Servers vorhanden ?
Vielen Dank im Voraus
Gruß Felix
-
Hallo Felix,
beim Beenden der Anwendung sollten auch offene Verbindungen geschlossen werden.
U. U. kann das allerdings mit Verzögerung passieren, siehe u. a.:
Understand special TCP/IP property “Keep Alive” in SQL Server 2005Ein ordnungsgemässes Schliessen wäre allemale vorzuziehen.
Und eine Ausnahmebehandlung sollte bei Datenzugriffmethoden immer vorhanden sein.Gruß Elmar
- Als Antwort markiert Felix86 Donnerstag, 8. März 2012 15:15