Retirei este exemplo de uma aplicação que esta sendo desenvolvida em 5 camadas, especificamente neste modelo a classe de persistência lê as properties da instância que a invocou (seja ela de qualquer classe) e monta todos SQLs dinamicamente, achei muito interessante a forma como desenvolvemos a função de select e resolvi disponibilizar esta função que pode retornar tanto um Dataset como um Datareader. Agradecimentos especiais a Eduardo Flaeschen. Espero que gostem, um abraço.