Ich habe eben in den Tiefen der MSDN durch Zufall (wie immer eigentlich) das Using-Statement entdeckt: verwendet man das, kann man immer sicher sein, dass alle Connections, DataReader etc. 100%ig geschlossen werden - d.h. man kann eigentlich unmöglich aus Versehen irgendwas offen lassen. Ob das nun allerdings jedermans Sache ist, steht wohl auf nem anderen Blatt.
Beispiel:
string connString = "Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;";
using (SqlConnection conn = new SqlConnection(connString))
{
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT CustomerId, CompanyName FROM Customers";
conn.Open();
using (SqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
Console.WriteLine("{0}\t{1}", dr.GetString(0), dr.GetString(1));
}
}