2010-07-30 7 views
14

In meinem DAL schreibe ich Abfragen wie folgt:Closing SqlConnection und SqlCommand C#

using(SQLConnection conn = "connection string here") 
{ 
    SQLCommand cmd = new ("sql query", conn); 
    // execute it blah blah 
} 

Nun zu mir, es kam nur, dass ich nicht explizit das SQLCommand Objekt schließen werde. Jetzt weiß ich, dass der "using" -Block sich um das SQLConnection-Objekt kümmert, aber kümmert sich das auch um das SQLCommand-Objekt? Wenn nicht, habe ich ein ernstes Problem. Ich würde die 'using' auf dem SQLCommand auf Tausenden und Abertausenden von Codezeilen setzen oder eine cmd.Close() auf Hunderte von Methoden tun. Bitte sagen Sie mir, dass wenn Sie den Befehl verwenden oder den Befehl schließen, eine bessere Speicherverwaltung der Web-App bietet?

+0

Ich denke, dies auch für Sie interessant sein sollte: http://valueinjecter.codeplex.com/ wikipage? title = Daten% 20access% 20layer% 20% 28ORM% 29% 20with% 20the% 20Value% 20Injecter & referenceTitle = Startseite – Omu

Antwort

9

Nein, die Anweisung using kümmert sich nicht um den Befehl.

Sie sollten die Befehle mit using Aussagen auch wickeln, da dies richtig Dispose auf sie nennen:

using(SQLConnection conn = 'connection string here') 
{ 
    using(SQLCommand cmd = new ('sql query', conn)) 
    { 
     //execute it blah blah 
    } 
} 
12

Die SqlConnection hat keine Kenntnis über die SqlCommand, so sollten Sie es von selbst schließen:

using (SqlConnection conn = new SqlConnection("connection string here")) 
using (SqlCommand cmd = new SqlCommand("sql query", conn)) 
{ 
    // execute it blah blah 
} 
4

Es wird nicht die SqlCommand handhaben, aber die SqlCommand wird schließlich vom Garbage Collector behandelt werden. Ich tendiere dazu, folgendes zu tun:

using (SqlConn conn ...) 
using (SqlComm comm ...) 
{ 
    conn.Open(); 
} 

Das Stapeln der using-Anweisungen hier wird beide behandeln.