Muitas vezes nos encontramos em um cenário onde as classes de entidade da nossa aplicação são uma representação fiel do banco de dados seguindo o modelo MVC.
Nessas situações muitas vezes na nossa camada de acesso a dados temos que fazer a passagem de parametros para inserts, updates e deletes um a um.
Utilizando o código a seguir basta criarmos uma classe pai, de onde todas as outras herdam (no caso do exemplo a classe Pessoa), então passando o command e a instancia da nossa classe filha deixamos o reflection fazer todo o trabalho, pegando cada propriedade existente na classe e adicionando um parametro ao nosso command.
Segue o código :
public void MontaParametro(ref DbCommand prCmd,Pessoa prPessoa) { // instancia Sql como default DbParameter parametro = new SqlParameter(); string identificador = ""; //loop do reflection pegando cada propriedade da classe que foi passada e também da classe pai Pessoa foreach (PropertyInfo pi in prPessoa.GetType().GetProperties()) { //Verificação do tipo de command (no caso do OracleCommand é necessário adicionar a referência ao System.Data.OracleClient if (prCmd.GetType() == typeof(SqlCommand)) { identificador = "@"; parametro = new SqlParameter(); } else if (prCmd.GetType() == typeof(OracleCommand)) { identificador = ":"; parametro = new OracleParameter(); } else if (prCmd.GetType() == typeof(OleDbCommand)) { identificador = "?"; parametro = new OleDbParameter(); } parametro.Value = pi.GetValue(prPessoa,null); parametro.ParameterName = identificador + pi.Name; prCmd.Parameters.Add(parametro); } } // Domingos Carreira De Paola