Ho il codice qui sotto per interrogare i record da una procedura memorizzata, ma sono preoccupato che non possa smaltire ciò di cui ho bisogno o mi stia smaltendo quando l'oggetto verrà eliminato dal Garbage Collector poco dopo comunque.C# sql cosa smaltire
Devo disporre di SqlDataReader poiché si trova nel blocco di prova try?
Devo eseguire entrambi cmd.Dispose e cmd.Connection.Close o si deduce l'altro?
Il garbage collector eliminerà comunque tutti questi oggetti (forse non abbastanza tempestivamente) o questi oggetti implicitamente richiedono di essere eliminati probabilmente a causa dell'uso di codice non gestito?
public void GetData(string studentID)
{
SqlCommand cmd = new SqlCommand("sp_stored_proc",
new SqlConnection(Settings.Default.connectionString))
{ CommandType = CommandType.StoredProcedure };
try
{
cmd.Connection.Open();
cmd.Parameters.AddWithValue("@student_id", studentID);
SqlDataReader dr = cmd.ExecuteReader();
//do something with the data
if (dr != null)
dr.Dispose();
}
catch
{
//error handling
}
finally
{
if (cmd != null)
{
cmd.Dispose();
cmd.Connection.Close();
}
}
}
Se potessi revocare questo più di una volta, lo farei. VIENI A PERSONE! UTILIZZI CON I BLOCCHI! –
Smaltire l'oggetto 'SqlCommand' ** non ** dispose il' SqlConnection'. Questo è molto facile da testare. http://stackoverflow.com/questions/60919/is-sqlcommand-dispose-enough/60934#60934 – arcain
Devo gettare il lettore anche se dispongo il comando? Devo disporre il comando anche se dispongo la connessione? Puoi riferirci a qualsiasi fonte di questo? – Lii