Normalmente il codice dopo il return di una funzione non viene eseguito. Pero', se hai la necessita' di chiudere una connection, allora puoi utilizzare un blocco try/finally mettendo appunto nel finally la chiusura della connessione. Infatti, indipendentemente dal punto di uscita (es. return o errore) della funzione, il codice presente nel finally viene sempre eseguito prima di uscire definitivamente.
Per il resto, se non ricordo male qualche giorno fa avevi gia' postato qualcosa di simile e ti avevo gia' consigliato di non creare una funzione che restituisce come valore di ritono un datareader per il semplice motivo che il datareader e' legato alla connessione. Quindi ripeto il consiglio che se hai bisogno di un contenitore per i dati puoi usare una datatable che e' invece un oggetto disconnesso e una volta riempito puo essere tranquillamente restituito e usato da altre funzioni.