title: Will ExecuteReader(CommandBehavior.CloseConnection) always close connection?
body: <p>Is it safe to write this helper method like this? Will it always close the connection? I understend if all goes well, it will, but will ExecuteReader close the connection even if it throws?</p>
  
  <pre><code>    public static IEnumerable&lt;DbDataRecord&gt; ExecuteSelect(string commandText, DbConnection conn)
      {
          using (DbCommand cmd = conn.CreateCommand())
          {
              cmd.CommandText = commandText;
              conn.Open();
              using (DbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection))
              {
                  foreach (DbDataRecord record in reader) { yield return record; }
              }
          }
      }
  </code></pre>