Vermeiden Sie solche Leser:
SqlConnection connection = new SqlConnection("connection string");
SqlCommand cmd = new SqlCommand("SELECT * FROM SomeTable", connection);
SqlDataReader reader = cmd.ExecuteReader();
connection.Open();
if (reader != null)
{
while (reader.Read())
{
//do something
}
}
reader.Close(); // <- too easy to forget
reader.Dispose(); // <- too easy to forget
connection.Close(); // <- too easy to forget
Schließen Sie sie stattdessen mit Anweisungen ein:
using(SqlConnection connection = new SqlConnection("connection string"))
{
connection.Open();
using(SqlCommand cmd = new SqlCommand("SELECT * FROM SomeTable", connection))
{
using (SqlDataReader reader = cmd.ExecuteReader())
{
if (reader != null)
{
while (reader.Read())
{
//do something
}
}
} // reader closed and disposed up here
} // command disposed here
} //connection closed and disposed here
Die using-Anweisung stellt die korrekte Entsorgung des Objekts und die Freisetzung von Ressourcen sicher.
Wenn Sie es vergessen, überlassen Sie die Reinigung dem Müllsammler, was eine Weile dauern kann.
Beachten Sie, dass das Entsorgen eines mit SqlCommand.ExecuteReader () instanziierten SqlDataReader die zugrunde liegende Verbindung nicht schließt / entsorgt.
Es gibt zwei gängige Muster. Im ersten Fall wird der Leser im Rahmen der Verbindung geöffnet und geschlossen:
Manchmal ist es praktisch, wenn eine Datenzugriffsmethode eine Verbindung öffnet und einen Leser zurückgibt. In diesem Fall ist es wichtig, dass der zurückgegebene Reader mit CommandBehavior.CloseConnection geöffnet wird, damit durch Schließen / Entsorgen des Readers die zugrunde liegende Verbindung geschlossen wird. Das Muster sieht ungefähr so aus:
und der aufrufende Code muss den Leser nur so entsorgen:
quelle
using
s zu verwenden, rufen Sie dispose imfinally {}
Block nach catch auf. So wie dies geschrieben ist, würden erfolgreiche Befehle niemals geschlossen oder entsorgt werden.Um sicher zu gehen, schließen Sie jedes SqlDataReader-Objekt in eine using-Anweisung ein .
quelle
Schließen Sie Ihren SQLDataReader einfach mit der Anweisung "using" ein. Das sollte sich um die meisten Ihrer Probleme kümmern.
quelle