¿Por qué siempre cerrar la conexión de la base de datos?

Si conectarse a una base de datos consume muchos recursos, ¿por qué una conexión de base de datos siempre debe cerrarse en su aplicación si tiene que volver a abrirla? ¿Puedo hacer que esta conexión esté disponible globalmente en toda mi aplicación para que otras clases y métodos puedan reutilizarla?

Por ejemplo (en pseudocódigo):

public class PopulateGridViews()
{
    public SqlConnection conn = new SqlConnection(@"Database:DATABASE");
    conn.Open();

    void PopulateGrid1()
    {
        SqlCommand cmd = new SqlCommand("SELECT * FROM TABLE1");
        cmd.Connection = conn;
        cmd.ExecuteNonQuery();
        cmd.Dispose();
        // Populate Grid1
    }

    void PopulateGrid2()
    {
        SqlCommand cmd = new SqlCommand("SELECT * FROM TABLE2");
        cmd.Connection = conn;
        cmd.ExecuteNonQuery();
        cmd.Dispose();
        // Populate Grid2
    }
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta