Wird eine Anweisung "using" um einen DataReader gesetzt, um sie zu schließen?

Schreibe ich normalerweise meinen DataReader code wie folgt:

try
{
    dr = cmd.ExecuteReader(CommandBehavior.SingleResult);
    while (dr.Read())
    {
        //Do stuff
    }
}
finally
{
    if (dr != null) { dr.Close(); }
}

Ist es sicher zu ersetzen, die try und finally mit nur einem using - block, um die DataReader's Schöpfung? Der Grund warum ich Frage ist, weil in allen die Microsoft-Beispiele, die ich gesehen habe verwenden Sie eine mit für die-Verbindung aber immer explizit aufrufen Close() auf die DataReader.

Heres ein Beispiel aus
Abrufen von Daten Mit einem 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();
    }
}
Kommentar zu dem Problem
Als seitliche Anmerkung, die meisten der MS-Beispiele, die ich gesehen habe, sind entweder zu kompliziert oder nicht wirklich nutzen viel von der Sprache verfügbaren Funktionen. Teilweise ist es, weil Sie einfach Rollen Sie den Beispiel-code aus früheren Versionen und wirklich nur schauen, dass es immer noch läuft. Meine Vermutung ist, dass dieser code nicht gepflegt ist, durch deren hellste, da der code ist nie clever oder effizient. Kommentarautor: NotMe
@NotMe von der Qualität der Beispiel code, ich habe Verdacht auf für die Jahre , geschrieben und verwaltet von entry-level-Praktikanten, nicht die Menschen, die tatsächlich entwickelt, die die Klassen in den ersten Platz. Es ist Dinge wie Microsofts glanzlos .NET-Dokumentation, die Art freue ich mich schon auf SO die neue Dokumentation-Erweiterung. Kommentarautor:
@Cupcake nicht ein dupe meiner Meinung nach. Dieser hier fragt, ob eine - block wird geschlossen, ein Daten-Leser, der andere fragt, ob es erforderlich ist, um es zu schließen. Nicht die gleiche Sache. Kommentarautor: Shadow Wizard
@ShadowWizard das ist ein guter Punkt. Kommentarautor:

InformationsquelleAutor der Frage user169867 | 2010-01-28

Schreibe einen Kommentar