One thing to remember is that with pooling in effect, if you close a connection, the operating system is going to hold it open for a length of time (the default is 1 minute). It does this in case another connection request comes through with the same credentials. It'll then re-use the connection. This tends to be done for performance reasons: the connect/disconnect affects CPU/memory on both the client and SQL Server system. Of course, if the operating system needs to open more connections, it will, so you could potentially have a lot of sleeping connections and that be normal behavior over time (even though the application code explicitly closes out the connection). How long have the processes been sleeping and what is the exact error?
K. Brian Kelley