You can skip this ramble if its old-hat to you...
Unlike old-style client-server apps, where each user logged into the database (making it easy for the DB-Admin to see who was connected). The client application would typically hold 2 or so connections permanently open for all selects and updates. The more users, the more connections.
Then came the Middle-Tier idea. Pop all db code in a server-based layer. Each client consumed objects, not connections. Whatever the marketing guys said, it was painful for VB developers even with MTS (that hosted this middle tier). One of the (many) downsides was that users no longer connected directly with the database - a 'proxy' user made the connection(s). Now the DB Administrator had no way of knowing who was connected. One 'benefit' of middle-tier is that as the number of users grow, the number of db connections did not (at least, not at the same rate) - it was 'scaleable'. A web-server can be thought of as a 'Middle-Tier' layer, and it exhibits these characteristics.
To make the performance of the middle-tier slightly better, they decided to 'cache' db connections. Although your app closes a connection, ODBC will actually keep it open. ODBC/MTS will establish a minimum of 4 concurrent connections that stay open for about 3 minutes after use. (This is called connection pooling. I cannot remember where this can be configured.)
A single connection can only do one thing at a time - a select or an update, for example. A web page that fills 5 lists must run these 5 SQL selects sequentially. To span them across as many connections that are available, the web page would have to use process threading - only really available in .Net, as it makes the programming model straight-forward. However, each of the 5 SQL selects may actually use different connections - ODBC/ADO decides on this - assuming that you open/close between each command. This explains the multiple connections that you see.
You should close each SQL command before the page is sent to the client - handled automatically by the DTC objects.
An open dtc recordset is 'closed' when the page is complete, and re-opened when a server-round-trip is provoked. This cycle of closing and re-opening seems inefficient - but it is the only way that web forms can work.
Listboxes and Labels 'hold' their values in hidden form fields, and so only need populating once.
Well, I hope this helps - it turned out a bit like a school lesson. Sorry.
(Content Management)