Finalmente è arrivato il messaggio di errore.

Si tratta del DataReader il quale si lamenta della connessione al database chiusa; infatti, occorre passargli una connessione aperta per poter eseguire un comando.

Il problema reale, quindi, è che la connessione non viene aperta, usando l'apposito metodo Open.

Se la connessione venisse preventivamente aperta e si verificasse un problema, verrebbe sollevata un'eccezione che spiega come mai non è possibile aprire una connessione.

In breve, o 1) manca del tutto l'apertura della connessione, oppure - anche in caso di errore nell'apertura - 2) si tenta comunque di passare la connessione (chiusa) al DataReader, che ovviamente se ne lamenta.