Good practice to open/close connections in an asp.net application?

I’ve been working on a web application in ASP.net. My application has several pages and all of them need to display tables that are populated by a database. Right now what I’m doing is, on each page, I’m opening a database connection, executing the query specific to that page, and closing the db connection. So this happens each time the user clicks a link to go to a new page or clicks a form control like the grid page.

SQL Server query runs slower from ADO.NET than in SSMS

I have a query from a web site that takes 15-30 seconds while the same query runs in .5 seconds from SQL Server Management studio. I cannot see any locking issues using SQL Profiler, nor can I reproduce the delay manually from SSMS. A week ago, I detached and reattached the database which seemed to miraculously fix the problem. Today when the problem reared its ugly head again, I tried merely rebuilding the indexes. This also fixed the problem. However, I don’t think it’s necessarily an index problem since the indexes wouldn’t be automatically rebuilt on a simple detach/attach, to my knowledge.