Non uso access quindi non saprei dirti bene l'errore pero' prova ad approfondire l'uso della proprieta' SourceColumn dell'oggetto parameter (access non ha delle vere e proprie storedprocedure quindi probabile sia necessario specificargli questa proprieta' per usare query parametriche).
Per il resto, la funzione che hai scritto fossi in te non la userei o perlomeno cambierei il valore di ritorno. Non mi sembra infatti una grande idea far restituire un datareader da una funzione per il semplice motivo che il datareader e' intimamente legato con la connessione che quindi andrebbe aperta usata e chiusa il prima possibile e nel punto in cui serve. Semmai, sarebbe piu' corretto che la funzione restituisse una datatable che invece e' un oggetto cosideetto disconnesso e quindi lo puoi far andare da una libreria all'altra a cuor leggero.