2010-07-30 29 views
14

Nel mio DAL ho scrivere query come questa:Chiusura SqlConnection e SqlCommand C#

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

Ora è appena venuto in mente che non sto chiudendo in modo esplicito l'oggetto SQLCommand. Ora so che il blocco "using" si prenderà cura dell'oggetto SQLConnection, ma si occuperà anche dell'oggetto SQLCommand? In caso contrario, ho un problema serio. Dovrei inserire "l'uso" in SQLCommand su migliaia e migliaia di righe di codice o fare un cmd.Close() su centinaia di metodi. Ti prego, dimmi che se inserire l'uso o chiudere il comando fornirà una migliore gestione della memoria dell'app web?

+0

credo che questo dovrebbe anche essere interessante per voi: http://valueinjecter.codeplex.com/ WikiPage? title = dati% 20access% 20layer% 20% 29% 28ORM% 20with% 20the% 20Value% 20Injecter & referringTitle = casa – Omu

risposta

9

No, l'istruzione using non si prenderà cura del comando.

Si dovrebbe avvolgere i comandi con using dichiarazioni così, dal momento che questo sarà corretto chiamare Dispose su di loro:

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

Il SqlConnection non ha alcuna conoscenza del SqlCommand, così si dovrebbe chiudere da solo:

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

Non sarà gestire il SqlCommand, ma il SqlCommand sarà fine essere gestito dal garbage collector. Tendo a fare quanto segue:

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

L'impilamento delle istruzioni di utilizzo qui gestirà entrambe.

Problemi correlati