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 dieDataReader
Schö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();
}
}