They should be closed as quickly as possible.
ADO.NET automatically generates a connection pool, so when you "close" a connection, you are really just returning it to the pool without disconnecting entirely from the database (then if it is not used for a certain amount of time, it is reclaimed).
If, however you leave the connection open, it cannot be returned to the pool (which is bad).
Note: for ADO.NET connection pooling to work, you must have _identical_ connection strings! (even differences in spaces can cause two conn-strings to be considered different. In this case, ADO.NET would create a seperate conn pool for each string, instead of sharing them properly.
~ Andrew