O problema é que, por algum motivo, seu DataReader não está sendo fechado. Uma exceção? O usuário do método não se lembrou de fechar o DataReader?
Uma função que retorna um DataReader para ser usado fora de seu corpo deixa a responsabilidade de fechá-lo para o código externo, portanto não há garantia de que o Reader será fechado. Se você não fechar o leitor, não poderá reutilizar a conexão na qual ele foi aberto.
Então, retornar um DataReader de uma função é uma péssima ideia!
Você pode ver uma discussão completa sobre este assunto aqui .
Procure os usos desta função (
GetDataReader
), e verifique se há garantia de que o leitor está sendo fechado. E, mais importante, que não há possibilidade de que esse código entre novamente e use a mesma coleção para abrir um novo DataReader antes que o primeiro seja fechado. (Não se deixe enganar pelo CommandBehavior.CloseConnection. Isso só se encarrega de fechar a conexão quando o DataReader estiver fechado... somente se você não deixar de fechá-lo)