none
Utilizando DAL e MODEL RRS feed

  • Pergunta

  • Pessoal, bom dia!

      Uma dúvida.

      Quando quero listar minha DAL utilizando uma <list> que passa todos os valores da query para a class model e então retorno os valores..

       

     Abaixo colocarei a DAL para vocês entenderem:

           public List<NCM> GetAllProdutos()
            {
                List<NCM> Lista = new List<NCM>();

                dbConsultClient dcc = new dbConsultClient();
                MySqlDataReader dr = dcc.ExecuteReader(dbConsultClient.MyConnString, System.Data.CommandType.Text, "select *from tb_produto");

                while (dr.Read())
                {
                    try
                    {
                        NCM tec = new NCM(Convert.ToInt32(dr["id_ncm"]), Convert.ToInt32(dr["tec"]), Convert.ToDecimal(dr["aliqicms"]), Convert.ToDecimal(dr["aliqii"]), Convert.ToDecimal(dr["aliqipi"]), Convert.ToDecimal(dr["aliqpis"]), Convert.ToDecimal(dr["aliqcofins"]), Convert.ToInt32(dr["ativo"]));
                        Lista.Add(tec);
                    }
                    catch
                    {
                        //Fechar conexões
                        dr.Close();
                        dr.Dispose();
                        dcc.CloseConn(dbConsultClient.MyConnString);
                        //##
                    }
                }

                //Fechar conexões
                dr.Close();
                dr.Dispose();
                dcc.CloseConn(dbConsultClient.MyConnString);
                //##

                return Lista;
            }

     

    Bom para isto funcionar eu tenho a model, onde tenho isto:

            public NCM(int ID_NCM, int TEC, decimal ALIQICMS, decimal ALIQII, decimal ALIQIPI, decimal ALIQPIS, decimal ALIQCOFINS, int ATIVO)
            {
                this.id_ncm = ID_NCM;
                this.tec = TEC;
                this.aliqicms = ALIQICMS;
                this.aliqii = ALIQII;
                this.aliqipi = ALIQIPI;
                this.aliqpis = ALIQPIS;
                this.aliqcofins = ALIQCOFINS;
                this.ativo = ATIVO;
            }

     Porém por exemplo as vezes numa dropdownlist eu preciso trazer somente o valor de 1 coluna e acabo trazendo a "GetAllProdutos()" inteira, ou seja ele faz uma query completa só para eu ter um resultado, então pensei na DAL eu faço outro metodo selecionando somente uma coluna, porém como eu poderia chamar a model pedindo só uma coluna se como parametro eu peço todas estas?
       public NCM(int ID_NCM, int TEC, decimal ALIQICMS, decimal ALIQII, decimal ALIQIPI, decimal ALIQPIS, decimal ALIQCOFINS, int ATIVO)

    =\ Se alguém puder ajudar.

    quarta-feira, 5 de setembro de 2012 13:58

Respostas

  • Entendi, assim não vejo problema entende, você pode criar outro Construtor, esperando apenas os parametros que você precisa passar, ou você estanciar a sua classe e setar os parametros depois.

    Por exemplo:

    NCM obj = new NCM();
    obj.Tec = "valor";
    obj.ID = 1;
    
    Lista.add(obj);


    Se a resposta foi útil por favor qualifique! Janderson Candido de Mattos - MCTS

    • Marcado como Resposta Douglas Bertelli quarta-feira, 5 de setembro de 2012 14:57
    quarta-feira, 5 de setembro de 2012 14:43
  • Que bom que funcionou tuco...

    Seguinte cara...

    public NCM()
    {
    }
    
    public NCM(int ID_NCM, int TEC, decimal ALIQICMS, decimal ALIQII, decimal ALIQIPI, decimal ALIQPIS,
     decimal ALIQCOFINS, int ATIVO)
    {
       this.id_ncm = ID_NCM;
       this.tec = TEC;
       this.aliqicms = ALIQICMS;
       this.aliqii = ALIQII;
       this.aliqipi = ALIQIPI;
       this.aliqpis = ALIQPIS;
      this.aliqcofins = ALIQCOFINS;
       this.ativo = ATIVO;
    }

    public NCM(int ID_NCM, int TEC)
    {
      this.id_ncm = ID_NCM;
      this.tec = TEC;
    }

    Desta forma percebe, é só adicionar outro construtor diferente.


    Se a resposta foi útil por favor qualifique! Janderson Candido de Mattos - MCTS

    • Marcado como Resposta Douglas Bertelli quarta-feira, 5 de setembro de 2012 15:18
    quarta-feira, 5 de setembro de 2012 15:03
  • Sem dúvida....

    Veja o exemplo

    public class Pessoa 
    {      
      public string nome { get; set; } 
      public int IdPessoa { get; set; } 
      public int IdSetor { get; set; } 
    
      public Pessoa()    
      {     
    
      } 
      
      public Pessoa(int IdPessoa)     
      {    
    
      } 
           
      public Pessoa(int IdPessoa, string nome)  
      {   
     
      }   
      
      public Pessoa(int IdPessoa, string nome, int IdSetor)     
      {    
      }   
    }

    Agora se você adicionasse outro construtor assim:

     public Pessoa(int IdPessoaNova, string outroNome, int outroIdSetor)
    {

    }

    Isso não iria funcionar percebe? porque vc ja tem um construtor com os mesmo tipos, ou seja, vc ja tem um construtor que espera

    um tipo int, um tipo string, e outro tipo int, na mesma ordem.


    Se a resposta foi útil por favor qualifique! Janderson Candido de Mattos - MCTS

    • Marcado como Resposta Douglas Bertelli quarta-feira, 5 de setembro de 2012 15:39
    quarta-feira, 5 de setembro de 2012 15:24

Todas as Respostas

  • E ae cara, blz????

    Seguinte, quando você fala em GetAllProdutos, a idéia é trazer todos os produtos certo? pelo menos é isso que eu penso olhando para o método, e não em trazer todas as colunas, entende a diferença?

    Ou seja, ele vai trazer todos os produtos e para cada produto todas as suas propriedades, ou colunas.

    O que você pode fazer é criar outro método para trazer apenas uma coluna, ou sei la, um método customizado entende, que retorne as colunas que você precisa.

    Você pode criar um outro construtor e passar apenas esses parâmetros:

    public NCM(int ID_NCM, int TEC)
    {
      this.id_ncm = ID_NCM;
      this.tec = TEC;
    }

    E você pode ter um método na DAL para retornar essa lista:

    public List<NCM> GetTecProdutos()
    {

        .....

        NCM tec = new NCM(Convert.ToInt32(dr["id_ncm"]), Convert.ToInt32(dr["tec"]));

        lista.Add(tec);

        .....

      return lista;

    }



    Se a resposta foi útil por favor qualifique! Janderson Candido de Mattos - MCTS


    quarta-feira, 5 de setembro de 2012 14:24
  •   Opa, bom dia Mr.

       Então, eu até fiz isto! Porém, veja que para fazer exatamente desta forma tenho que abrir um novo arquivo .cs por que em outra ocasião eu realmente necessito trazer todos os valores, mas para outras ocasiões como na Dropdownlist eu preciso somente de uma coluna, só que eu não queria abrir um arquivo para cada ddl hahaha..

    quarta-feira, 5 de setembro de 2012 14:28
  • Desculpa, é que eu não conheço sua regra de negócio, mas o que vc quer dizer com "abrir um novo arquivo.cs".

    E porque abrir um novo?


    Se a resposta foi útil por favor qualifique! Janderson Candido de Mattos - MCTS

    quarta-feira, 5 de setembro de 2012 14:30
  • Então.. olha só vou copiar só a Model para ficar mais pratico:

        public class NCM
        {
    //Private 
            private int id_ncm;
            private int tec;
            private decimal aliqicms;
            private decimal aliqii;
            private decimal aliqipi;
            private decimal aliqpis;
            private decimal aliqcofins;
            private int ativo;

    //Constructor
            public NCM() { }

            public NCM(int ID_NCM, int TEC, decimal ALIQICMS, decimal ALIQII, decimal ALIQIPI, decimal ALIQPIS, decimal ALIQCOFINS, int ATIVO)
            {
                this.id_ncm = ID_NCM;
                this.tec = TEC;
                this.aliqicms = ALIQICMS;
                this.aliqii = ALIQII;
                this.aliqipi = ALIQIPI;
                this.aliqpis = ALIQPIS;
                this.aliqcofins = ALIQCOFINS;
                this.ativo = ATIVO;
            }

    //Public
            public int Id_ncm
            {
                get { return id_ncm; }
                set { id_ncm = value; }
            }

      etc... etc...

      neste caso eu tenho uma DAL que traz uma query que realmente compoe todos estes params.. e realmente em algumas ocasioes eu necessito usar o "GetAllProdutos" pq preciso trazer em um gridview todos estes dados e tal.. Porém em outras ocasiões eu tenho uma dropdownlist e preciso trazer somente 2 colunas, veja que a o nome da class é a própria "class NCM" na minha DAL eu chamo quem? a class NCM, que é para onde eu passo os parametros, eu não teria como abrir um outro metodo dentro deste arquivo .cs passando soh 2 parametros como sugeriu, a não ser que tenha outra forma de instanciar na DAL que eu não conheço.

      este é o problema =\

      
    quarta-feira, 5 de setembro de 2012 14:37
  • Entendi, assim não vejo problema entende, você pode criar outro Construtor, esperando apenas os parametros que você precisa passar, ou você estanciar a sua classe e setar os parametros depois.

    Por exemplo:

    NCM obj = new NCM();
    obj.Tec = "valor";
    obj.ID = 1;
    
    Lista.add(obj);


    Se a resposta foi útil por favor qualifique! Janderson Candido de Mattos - MCTS

    • Marcado como Resposta Douglas Bertelli quarta-feira, 5 de setembro de 2012 14:57
    quarta-feira, 5 de setembro de 2012 14:43
  • Vou testar e ja retorno para ver se deu certo!
    quarta-feira, 5 de setembro de 2012 14:50
  • Shooow cara.. funcionou veja só

            public NCM() { }

            public NCM(int ID_NCM, int TEC, decimal ALIQICMS, decimal ALIQII, decimal ALIQIPI, decimal ALIQPIS, decimal ALIQCOFINS, int ATIVO)
            {
                this.id_ncm = ID_NCM;
                this.tec = TEC;
                this.aliqicms = ALIQICMS;
                this.aliqii = ALIQII;
                this.aliqipi = ALIQIPI;
                this.aliqpis = ALIQPIS;
                this.aliqcofins = ALIQCOFINS;
                this.ativo = ATIVO;
            }

    Eu tinha esquecido que eu havia deixado este: "        public NCM() { }" exatamente para estas ocasiões assim eu pude instanciar sem ter que passar parametro.

     Mas vc disse antes desta opção que eu poderia abrir um novo constructor, como seria isto? Se importa em dizer?

    quarta-feira, 5 de setembro de 2012 14:57
  • Que bom que funcionou tuco...

    Seguinte cara...

    public NCM()
    {
    }
    
    public NCM(int ID_NCM, int TEC, decimal ALIQICMS, decimal ALIQII, decimal ALIQIPI, decimal ALIQPIS,
     decimal ALIQCOFINS, int ATIVO)
    {
       this.id_ncm = ID_NCM;
       this.tec = TEC;
       this.aliqicms = ALIQICMS;
       this.aliqii = ALIQII;
       this.aliqipi = ALIQIPI;
       this.aliqpis = ALIQPIS;
      this.aliqcofins = ALIQCOFINS;
       this.ativo = ATIVO;
    }

    public NCM(int ID_NCM, int TEC)
    {
      this.id_ncm = ID_NCM;
      this.tec = TEC;
    }

    Desta forma percebe, é só adicionar outro construtor diferente.


    Se a resposta foi útil por favor qualifique! Janderson Candido de Mattos - MCTS

    • Marcado como Resposta Douglas Bertelli quarta-feira, 5 de setembro de 2012 15:18
    quarta-feira, 5 de setembro de 2012 15:03
  • ué, mas eles tem os mesmos nomes ! Isso funcionaria? rsrsr
    quarta-feira, 5 de setembro de 2012 15:16
  • Sem dúvida....

    Veja o exemplo

    public class Pessoa 
    {      
      public string nome { get; set; } 
      public int IdPessoa { get; set; } 
      public int IdSetor { get; set; } 
    
      public Pessoa()    
      {     
    
      } 
      
      public Pessoa(int IdPessoa)     
      {    
    
      } 
           
      public Pessoa(int IdPessoa, string nome)  
      {   
     
      }   
      
      public Pessoa(int IdPessoa, string nome, int IdSetor)     
      {    
      }   
    }

    Agora se você adicionasse outro construtor assim:

     public Pessoa(int IdPessoaNova, string outroNome, int outroIdSetor)
    {

    }

    Isso não iria funcionar percebe? porque vc ja tem um construtor com os mesmo tipos, ou seja, vc ja tem um construtor que espera

    um tipo int, um tipo string, e outro tipo int, na mesma ordem.


    Se a resposta foi útil por favor qualifique! Janderson Candido de Mattos - MCTS

    • Marcado como Resposta Douglas Bertelli quarta-feira, 5 de setembro de 2012 15:39
    quarta-feira, 5 de setembro de 2012 15:24
  • Ahhh entendi, eu sempre terei que ter uma diferença de tipos para poder usar a mesma classe.. nossa essa eu não sabia muito obrigado.
    quarta-feira, 5 de setembro de 2012 15:39