Ciao, credo che il problema sia qui
Se il datareader, per qualche motivo è null (e non senza righe), il controllo successivo scatena l'errore perchè per VS il Datareader "non esiste" (diciamo così...). per ovviare, potresti aggiungere un ulteriore test sul null:
if (dr!= null && dr.HasRows)
Prova e fammi sapere.
PV