solito scrivo il mio codice DataReader
in questo modo:Inserendo un'istruzione "using" su un DataReader, si chiude?
try
{
dr = cmd.ExecuteReader(CommandBehavior.SingleResult);
while (dr.Read())
{
// Do stuff
}
}
finally
{
if (dr != null) { dr.Close(); }
}
E 'sicuro di sostituire il try
e finally
con solo un using
blocco intorno creazione 's il DataReader
? La ragione per cui mi chiedo è perché in tutti gli esempi Microsoft ho visto che usano un uso per la connessione ma chiamano sempre esplicitamente Close()
su DataReader
.
è Ecco un esempio da Retrieving Data Using a DataReader (ADO.NET):
static void HasRows(SqlConnection connection)
{
using (connection)
{
SqlCommand command = new SqlCommand(
"SELECT CategoryID, CategoryName FROM Categories;",
connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
Console.WriteLine("{0}\t{1}", reader.GetInt32(0),
reader.GetString(1));
}
}
else
{
Console.WriteLine("No rows found.");
}
reader.Close();
}
}
Come nota a margine, la maggior parte degli esempi di MS che ho visto sono troppo complicati o non sfruttano gran parte delle funzionalità linguistiche disponibili. In parte è perché si limitano a passare il codice di esempio dalle versioni precedenti e in realtà controllano solo che funzioni ancora. La mia ipotesi è che questo codice non è mantenuto dal loro più brillante perché il codice non è mai intelligente o efficiente. – NotMe
@NotMe dalla qualità del codice di esempio, ho sospettato * per anni * che è stato scritto e gestito da stagisti entry-level, non dalle persone che hanno effettivamente progettato le classi in primo luogo. Sono cose poco brillanti di Microsoft.Documentazione NET che mi fa pensare alla [nuova espansione della documentazione di SO] (http://meta.stackoverflow.com/questions/303865/warlords-of-documentation-a-proposed-expansion-of-stack-overflow). –
Possibile duplicato di [È necessario chiudere manualmente e smaltire SqlDataReader?] (Http://stackoverflow.com/questions/744051/is-it-necessario-a-manual-close-and-dispose-of-sqldatareader) –