Trate de evitar el uso de lectores de esta manera:
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
En su lugar, se envuelven en using:
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
La instrucción using asegurarán una eliminación correcta del objeto y liberación de recursos.
Si lo olvida, estará dejando la limpieza al recolector de basura, lo que podría llevar un tiempo.
No necesita la instrucción .Close() en ninguna de las dos muestras: se trata con la llamada .Dispose(). –
Bien, marqué el cierre como opcional en el código – Codebrain
Esta muestra no muestra la conexión subyacente cerrada/eliminada, que es lo más importante. – Joe