I was thinking that the SQLDataReader should not work if there is no connection to the SQLServer.
I experimented this scenario. I execute the ExecuteReader then stop
It reads them as it has time in the background. By the time you had gone to SQL Server and closed the connection, all the data had transferred over in the background. What happens when you execute the reader, is that it calls SQL Server, and tells it to start sending results. As soon as the query is done executing (parses correctly, query is valid), but before it is finished running, it returns. At that point it you can start calling the read method. However, it still reads and buffers data in the background so that when you call read again, the next row is ready, waiting in the buffer, and it doesn't have to go to the database.