Class that selects the product name or code or value

2

I'm doing a class that will get one of three values, and will list the field that I fill in, I'll type the product name or the code or the value and it will list me. I need help to make the following condition: if I type the name it will bring me the name, if it is the code will bring the product with the respective code or the value

public List<Produtos> selectFilter(string nomeProduto, int codigoProduto, double valorProduto)
    {

        //instancia a classe de conexaoDB
        //cria a classe conexao DB
        ConexaoBancoDados conexaoDB = new ConexaoBancoDados();

        //executa o metodo getStringConexao
        string stringConexao = conexaoDB.getStringConexao();

        //cria a conexao a partir da String
        MySqlConnection con = new MySqlConnection(stringConexao);
        con.Open();

        //tratamento de erro
        try
        {
            //seleciona da tabela onde o campo cid_nome for igual ao nome digitado
            string sql = @"select pro_codigo,
                            set_codigo,
                            pro_nome,
                            pro_valor,
                            pro_localizacao,
                            pro_descricao,
                            pro_cestabasica,
                            pro_imagem,
                            pro_codigobarras
                            from produtos where 1=1";
            MySqlCommand cmd = new MySqlCommand(sql, con);
            if(!string.IsNullOrWhiteSpace(nomeProduto)){
                sql += @" or pro_codigo like @pro_codigo or pro_valor like @pro_valor";
                cmd.Parameters.AddWithValue("pro_codigo", string.Format("%{0}%", nomeProduto));
            }

            if(!string.IsNullOrWhiteSpace(codigoProduto)){
                slq = sql + @"or pro_nome like @pro_nome";
                cmd.Parameters.AddWithValue("pro")
            }
    
asked by anonymous 18.06.2014 / 01:52

2 answers

1

Create 3 variations of your function:

public List<Produtos> selectFilter(string nomeProduto) { ... }
public List<Produtos> selectFilter(int codigoProduto) { ... }
public List<Produtos> selectFilter(double valorProduto) { ... }

Create a method that assembles the query with the minimum it needs:

private String selectFilterComum()
{
    return @"select pro_codigo,
                        set_codigo,
                        pro_nome,
                        pro_valor,
                        pro_localizacao,
                        pro_descricao,
                        pro_cestabasica,
                        pro_imagem,
                        pro_codigobarras
                        from produtos";
}

Within your methods, call this common code and complete with the parameters:

...
var cmd = selectFilterComum();
// Complete com os parâmetros de cada método
    
18.06.2014 / 03:48
1

Create Overload Your Methods , and optimize the code for unnecessary code repetition. I made an example, but it is as simple as possible for understanding, since I would have made these methods even more optimized.

public class Filtro
{
    private String SQLDefault
    {
        get
        {
            return @"select pro_codigo, set_codigo, pro_nome,
                    pro_valor, pro_localizacao, pro_descricao,
                    pro_cestabasica, pro_imagem, pro_codigobarras
                    from produtos where 1=1";
        }
    }   
    public IList<Produtos> SelectFilter(Int32 CodigoProduto)
    {
        ConexaoBancoDados conexaoDB = new ConexaoBancoDados();            
        MySqlConnection con = null;
        MySqlCommand cmd = null;
        String SQLComplete = SQLDefault;
        IList<Produtos> Produtos = null;
        try
        {                
            con = new MySqlConnection(conexaoDB.getStringConexao());
            con.Open();            
            SQLComplete += " AND pro_codigo = @pro_codigo";
            cmd = new MySqlCommand(SQLComplete, con);
            cmd.Parameters.Add("@pro_codigo", MySqlDbType.Int32).Value = CodigoProduto;
            using (MySqlDataReader dr = cmd.ExecuteReader())
            {
                if (dr.HasRows)
                {
                    Produtos = new List<Produtos>();
                    while (dr.Read())
                    {
                        Produtos prod = new Produtos();
                        prod.pro_codigo = dr.GetInt32(0);
                        prod.set_codigo = dr.GetInt32(1);
                        prod.pro_nome = dr.GetString(2);
                        prod.pro_valor = dr.GetDouble(3);
                        prod.pro_localizacao = dr.GetString(4);
                        prod.pro_descricao = dr.GetString(5);
                        prod.pro_cestabasica = dr.GetString(6);
                        prod.pro_imagem = dr.GetString(7);
                        prod.pro_codigobarras = dr.GetString(8);

                        Produtos.Add(prod);

                    }
                }
            }
            cmd.Dispose();
            con.Close();
            con.Dispose();
        }
        catch {
            if (cmd != null ){
                cmd.Dispose();
            }
            if (con != null){
                if (con.State == System.Data.ConnectionState.Open){
                    con.Close();
                }
                con.Dispose();
            }
        }
        return Produtos;
    }
    public IList<Produtos> SelectFilter(String NomeProduto)
    {
        ConexaoBancoDados conexaoDB = new ConexaoBancoDados();
        MySqlConnection con = null;
        MySqlCommand cmd = null;
        String SQLComplete = SQLDefault;
        IList<Produtos> Produtos = null;
        try
        {
            con = new MySqlConnection(conexaoDB.getStringConexao());
            con.Open();
            SQLComplete += " AND pro_nome like @pro_nome";
            cmd = new MySqlCommand(SQLComplete, con);
            cmd.Parameters.Add("@pro_nome", MySqlDbType.String).Value = string.Format("%{0}%", NomeProduto);
            using (MySqlDataReader dr = cmd.ExecuteReader())
            {
                if (dr.HasRows)
                {
                    Produtos = new List<Produtos>();
                    while (dr.Read())
                    {
                        Produtos prod = new Produtos();
                        prod.pro_codigo = dr.GetInt32(0);
                        prod.set_codigo = dr.GetInt32(1);
                        prod.pro_nome = dr.GetString(2);
                        prod.pro_valor = dr.GetDouble(3);
                        prod.pro_localizacao = dr.GetString(4);
                        prod.pro_descricao = dr.GetString(5);
                        prod.pro_cestabasica = dr.GetString(6);
                        prod.pro_imagem = dr.GetString(7);
                        prod.pro_codigobarras = dr.GetString(8);

                        Produtos.Add(prod);

                    }
                }
            }
            cmd.Dispose();
            con.Close();
            con.Dispose();
        }
        catch
        {
            if (cmd != null)
            {
                cmd.Dispose();
            }
            if (con != null)
            {
                if (con.State == System.Data.ConnectionState.Open)
                {
                    con.Close();
                }
                con.Dispose();
            }
        }
        return Produtos;

    }
    public IList<Produtos> SelectFilter(Double ValorProduto)
    {
        ConexaoBancoDados conexaoDB = new ConexaoBancoDados();
        MySqlConnection con = null;
        MySqlCommand cmd = null;
        String SQLComplete = SQLDefault;
        IList<Produtos> Produtos = null;
        try
        {
            con = new MySqlConnection(conexaoDB.getStringConexao());
            con.Open();
            SQLComplete += " AND pro_valor = @pro_valor";
            cmd = new MySqlCommand(SQLComplete, con);
            cmd.Parameters.Add("@pro_valor", MySqlDbType.Double).Value = ValorProduto;
            using (MySqlDataReader dr = cmd.ExecuteReader())
            {
                if (dr.HasRows)
                {
                    Produtos = new List<Produtos>();
                    while (dr.Read())
                    {
                        Produtos prod = new Produtos();
                        prod.pro_codigo = dr.GetInt32(0);
                        prod.set_codigo = dr.GetInt32(1);
                        prod.pro_nome = dr.GetString(2);
                        prod.pro_valor = dr.GetDouble(3);
                        prod.pro_localizacao = dr.GetString(4);
                        prod.pro_descricao = dr.GetString(5);
                        prod.pro_cestabasica = dr.GetString(6);
                        prod.pro_imagem = dr.GetString(7);
                        prod.pro_codigobarras = dr.GetString(8);

                        Produtos.Add(prod);

                    }
                }
            }
            cmd.Dispose();
            con.Close();
            con.Dispose();
        }
        catch
        {
            if (cmd != null)
            {
                cmd.Dispose();
            }
            if (con != null)
            {
                if (con.State == System.Data.ConnectionState.Open)
                {
                    con.Close();
                }
                con.Dispose();
            }
        }
        return Produtos;
    }
    public IList<Produtos> SelectFilter(object value)
    {

        Type _type = value.GetType();
        IList<Produtos> Produtos = null;
        switch (_type.FullName.ToLower())
        {
            case "system.string":
                {
                    Produtos = this.selectFilter(((string)value));
                    break;
                }
            case "system.int":
            case "system.int32":
                {
                    Produtos = this.selectFilter(((Int32)value));
                    break;
                }                
            case "system.double":
                {
                    Produtos = this.selectFilter(((double)value));
                    break;
                }
        }
        return Produtos;
    }
}
The SelectFilter method has 4 overloads, one type Int32 , the other type String , the other type Double and the last type Object , this is magic where the compiler will decide which method to perform according to the informed pars.

The SelectFilter of Object has a pecularity, where it will decide which type is the value informed and redirect to the correct method according to the type.

References:

18.06.2014 / 16:20