2016-05-07 11 views
0

Ich mache Windows Forms-Anwendung mit Verbindung zu SQL Server (Verbindungsmodus). Jede Aktion, die ich in meiner Anwendung handhabe, benötigt die Verbindung. Ich weiß also nicht, wo ich die Verbindung schließen soll.Was passiert, wenn ich die Datenbankverbindung nicht im getrennten Modus schließe

Ich frage was, wenn ich die Verbindung nicht schließe. Ich weiß, dass kein Laufzeitfehler angezeigt wird. Aber gibt es einen anderen Fehler, der auftreten könnte?

+1

"die Verbindung", wie in "nur 1"? Können Sie garantieren, dass Sie immer nur 1 Verbindung benutzen? Wenn das so ist, sollten Sie kein großes Problem haben. Wenn Sie auf der anderen Seite Verbindungen schaffen und sie nicht schließen/beseitigen, dann werden Sie unweigerlich in Schwierigkeiten geraten. –

Antwort

0

Es besteht das Risiko, dass wenn Sie die gleiche Verbindung für jede Methode verwenden, von einem privaten Feld oder Methode etc .; Sie könnten am Ende versuchen zu lesen/zu schreiben, wenn die Verbindung noch offen ist.

Dies könnte dann Fehler werfen und Sie könnten in einem ganzen Haufen davon landen, wenn Sie eine Live-SQL-Datenbank verwenden.

Wenn Sie können, erstellen Sie eine neue Instanz einer Verbindung in einer using-Anweisung jedes Mal, wenn Sie auf die DB zugreifen möchten.

So:

var connectionString = "YourConnectionStringToTheDB"; 
var queryString ="YourSQLQueryHere"; // FROM * IN tbl SELECT * etc... 

using (SqlConnection connection = new SqlConnection(
      connectionString)) 
{ 
    using (SqlCommand command = new SqlCommand(queryString, connection)) 
    { 
     command.Connection.Open(); 
     command.ExecuteNonQuery(); 
    } 
} 

diese Weise ist es geschlossen ist und entsorgt, wenn der Code ausgeführt wird außerhalb des Anwendungsbereichs der using Aussage.

Beachten Sie, dass der SqlCommand auch in einer using Anweisung steht, da auch diese entsorgt werden kann.

Dies ist ein saubererer Code und markiert die Objekte, die vom Garbage Collector entsorgt werden. (Google ist dein Freund) - großes Thema; viele Dinge zu lesen.

Hier ist eine ähnliche Frage, die Sie etwas ausführlicher gibt: The C# using statement, SQL, and SqlConnection

EDIT

noch besser, Sie SQL-Code in einem try { }catch { } Block wickeln konnte Fehler zur Laufzeit zu handhaben.

+0

Als eine weitere Anmerkung, würde ich sogar Ihre 'SqlCommand' in eine Verwendung als auch, wie dies auch implementiert 'IDisposable' –

+0

Ich habe meine Antwort aktualisiert, um dies zu reflektieren –