Perhaps what is going on is the DataReader is being closed because you are closing the DB connection associated with it?

That is the only thing that seems to make any sense. You are closing the connection to the database, which the DR needs, so the DR closes as well??

That is just a guess, but it seems to make sense... set a watch on your lRead.IsClosed property when you are in your UseSQLDBExecuteReader, and see if it changes from open to closed as your finally runs. Also even if you remove the finally, the connection is going out of scope when your function ends, which would explain why even if you remove the finally it still happens?