As most ADO developers know well, there are basically two distinct syntax for opening a Connection and then a Recordset: you can explicitly create and open a Connection object, and then pass it to the 2nd argument of the Recordset’s Open method (or assign to the Recordset’s ActiveConnection property, which has the same effect). Or you can create an implicit connection object by passing a connection string to the 2nd argument of the Recordset’s Open method.
In regular Visual Basic programs, the two techniques are equivalent, but when you work under ASP the story is different, and it’s more complex. In fact, when you create a Recordset object using Server.CreateObject and then open it – thus creating an implicit Connection object – that connection isn’t automatically returned to the Connection pool when the Recordset is closed (or when the page completes its execution). Instead, the connection is returned to the pool only when it times out, usually after one minute. Needless to say, this can be an obstacle that can prevent your site from scaling correctly, and should be avoided by creating a Connection object explicitly.
Notice that you don’t have this problem if you instantiate the Recordset using the CreateObject function, instead of the Server.CreateObject method.