Generally, opening and closing connections is something I would do on a need basis. So imagine a method in the data layer like this:
private List<employee> GetEmployees()
{
OpenSQLConnection();
CloseConnection();
}</employee>
So open connections as late as possible and close it ASAP, keeping persistent connections open is not advised especially in case of web apps coz sooner or later the server will hit the max capacity of number of connections and will start rejecting connections at one point. So rapidly opening and closing connections would mean there is a steady availability of connections in the pool.
People also prefer to do a try..catch()..finally{} block and close connections in the finally block, I would do that only if there is no other non-db related code in my try block after i have used the connection. Because otherwise you would be unnecessarily and unwittingly keeping the connection open until you hit the finally block. Just my views.
Cheers.