Class that selects the product name or code or value

Asked

Viewed 273 times

2

I am making a class that will receive one of the three values, and will list the field I fill in, I will enter the product name or the code or the value and 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.inserir a descrição da imagem aqui

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")
            }
  • 2

    Could you post the code as text even instead of image? You can edit the question to include. The button {} editor will help you format code as code. So whoever helps you has a starting point without having to type in the entire image code. Thank you.

  • 1

    Prefer to post the code instead of the screenshot. I don’t know exactly where your question is. Is the difficulty in C# code or SQL? What can’t you do? This one where 1=1 I already think it’s a beautiful gambiarra.

  • this Where 1=1 is an example only

  • I am unable to create the condition if the name is entered it searches by name, if it is entered the code will fetch the code.

  • supported the suggestion to post code as text, facilitates reading, editing and copy/paste to editors for testing and inspection in code

  • @Andersonseibert I still don’t know if I understand since you haven’t added new information in your comment. I’ll kick something: would be missing a cmd.CommandText = sql; before you can add some parameter?

Show 1 more comment

2 answers

1

Create Overload of its Methods, and optimize code for unnecessary code repetition. I made an example, but, it is as simple as possible for understanding, since I would do more optimized still these methods.

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 method SelectFilter, has 4 overloads, one of the type Int32, the other kind String, the other kind Double and the last of its kind Object, this is magic where the compiler will decide which method to execute according to the informed framework.

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

References:

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 mounts the query with the minimum that 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

Browser other questions tagged

You are not signed in. Login or sign up in order to post.