Wird ein DataReader durch eine using-Anweisung geschlossen?

Normalerweise schreibe ich meineDataReader Code wie folgt:

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

Ist es sicher, die zu ersetzen?try undfinally mit nur einemusing Block um dieDataReaderSchöpfung? Der Grund, den ich mich wundere, ist, dass sie in allen Microsoft-Beispielen, die ich gesehen habe, ein using für die Verbindung verwenden, aber immer explizit aufrufenClose() auf derDataReader.

Hier ist ein Beispiel vonAbrufen 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();
    }
}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage