Keep it how you are so that you create the connection only when you need the data.
I beleive ASP.net uses ADO.NET Connection Pooling, so when you close the connection, you're not actually closing the connection, you just return connection back to the pool.
Pooling only works when connections are created using identical connection strings.
Or you can look into Data Access Layers etc..