Methods with parameter Dynamic C #

4

I need your help with the following question.

I have a data access class that has a method that takes the parameters to execute a stored procedure.

The problem is this, I have several objects in the application and I'm trying to create a class that receives one of these objects and execute the method of adding parameters according to the object received.

Follow the code you've made so far:

Data access class method that receives the parameters.

    public void AddParamentros(string parametro, dynamic valorParametro)
    {
        listaParamentrosSql.Add(new SqlParameter { ParameterName = parametro, Value = valorParametro });
    }

Data Class Usage:

public class ManterDados
{
    AcessoDadosSql acessoDados = new AcessoDadosSql();

    public string manter(dynamic objeto, StoredProcedures procedure)
    {
        //Limpa parâmetros adicionados
        acessoDados.LimparParametros();
        // Adiciona os parametros 
        addParametrosSql addParam = new addParametrosSql(objeto);
        // Executa a SP
        string retorno = acessoDados.ExecutaSql(System.Data.CommandType.StoredProcedure, procedure);
        return retorno;
    }

}

This is class I'm having problem with:

public class addParametrosSql
{


    AcessoDadosSql acessoDados = new AcessoDadosSql();

    private void adicionarParametros(PessoaJuridica pessoaJuridica)
    {

        acessoDados.AddParamentros("@Cnpj", pessoaJuridica.CNPJ);
        acessoDados.AddParamentros("@IE", pessoaJuridica.INSCRICAO_ESTADUAL);
        acessoDados.AddParamentros("@Suframa", pessoaJuridica.SUFRAMA);

    }
    private void adicionarParametros(PessoaFisica pessoaFisica)
    {

        acessoDados.AddParamentros("@Cpf", pessoaFisica.CPF);
        acessoDados.AddParamentros("@Nome", pessoaFisica.NOME);

    }
}

What is the correct procedure for the addParametrosSql class to execute the addParametros method according to the object passed as parameter?

When I pass the parameter as Dynamic, even though it is of

asked by anonymous 20.06.2016 / 01:52

1 answer

3

Honestly, this way will get you more rework than helping you.

First, I would leave your class addParametrosSql generic. In fact, the name is horrible. I'll pick a better name, okay?

public class ParametrosSqlHelper<TClasse>
    where TClasse: class, new()
{
    AcessoDadosSql acessoDados = new AcessoDadosSql();
    private TClasse _objeto;

    private ParametrosSqlHelper() { } // Evita de ter construtor público vazio, se você for fazer com construtor mesmo.
    public ParametrosSqlHelper(TClasse objeto) // Acho que não precisa.
    {
        _objeto = objeto;
    }

    private void adicionarParametros(TClasse classe)
    {
        foreach (var propriedade in classe.GetType().GetProperties()) 
        {
            acessoDados.AddParamentros("@" + propriedade.Name, propriedade.GetValue(classe, null));
        }
    }
}

ManterDados would look like this:

public class ManterDados
{
    AcessoDadosSql acessoDados = new AcessoDadosSql();

    public string manter(object objeto, StoredProcedures procedure)
    {
        //Limpa parâmetros adicionados
        acessoDados.LimparParametros();
        // Adiciona os parametros 
        var addParam = new ParametrosSqlHelper<PessoaJuridica>(objeto);
        // Executa a SP
        string retorno = acessoDados.ExecutaSql(System.Data.CommandType.StoredProcedure, procedure); // Eu não entendi isso aqui.
        return retorno;
    }
}

AddParametros is with the wrong spelling, and I do not know if this even has to exist, because there is no way to define the typing of the parameter, but the spelling is ok too.

public void AddParametros(string parametro, dynamic valorParametro)
{
    listaParamentrosSql.Add(new SqlParameter { ParameterName = parametro, Value = valorParametro });
}
    
20.06.2016 / 02:02