ok..so the problem is the connection object, not the recordset object.
question/comment...from the code that you are about to put into production, how are you checking to see if the rs is a recordset and if it is open?
used to run into similar issues...the best way i have found to deal with this is to create a "wrapper" class for database communication. all queries pass thru this class, which is the only place where queries are executed, records open and closed. the data can be returned in a structure/call or even a disconnected recordset if need be. that has helped greatly interms of reducing "orphan" connections and recordsets...