There is no problem with ADO procedures, as you thought.
You are getting '-1' value for RecordCount because you have not specified the cursor type for record set (rs) object. So it takes the default cursor which is 'adOpenForwardOnly' and it doesn't return the RecordCount. (It always returns -1 no matter how may records you have).
If you want to get the Record Count by RS object, use 'adOpenStatic' or 'adOpenKeyset' cursor types.
The Execute method cursor type defaults to 'adOpenForwardOnly' no matter what you try to set it to, by design.
To use RecordCount you will need to use the Open method. Since Open doesn't create the object like Execute, you will need to instantiate the recordset object.
This code works for me (note that cursor type 'adOpenStatic' has a value of 3 and I was working in VBScript, so I had to use the value. In TP/VBA if you have the correct reference selected then this constant value is defined so that you could use 'rs.Open "Select * from managedCare", conn, adOpenStatic')
<font class="small">Code:</font><hr /><pre>
set conn = CreateObject("ADODB.Connection")
set rs = CreateObject("ADODB.recordset")
rs.Open "Select * from managedCare", conn, 3
set rs = nothing
set conn = nothing
A problem is a difference between what is perceived and what is desired, that
we want to reduce (Dewey 1933)