none
Programação em Camadas DAO RRS feed

  • Pergunta

  • Tenho pesquisado e aplicado bastante o conceito de aplicação em camadas. No entanto, tenho uma dúvida. Como faço na camada DAO (ou DLL) para concatenar query SQL de acordo com checkboxes marcados no windows form? Tenho que passar a query por parametro desde o form até chegar na DAL?

    Estou expondo isso porque todos os exemplos que encontro na camada de dados (DAO/DLL) sempre as query já estão prontas. A dúvida é, e quando eu tenho que concatenar a query de acordo com as opções setadas no form??


    domingo, 30 de outubro de 2011 23:30

Respostas

  • Fala Rodrigues

    De forma alguma concatenar uma query sql é uma boa prática. Nunca utilize isso.

    O que você deve fazer é:

    1 - Passar somente os valores dos parametros para a DAL.

    2 - Deixar para a DAL a responsabilidade de incluir os parâmetros passados na query.

    Para resolver o problema desta query "dinamica". Você pode fazer de duas formas:

    1 - Criar querys especializadas com determinados filtros.

    2 - (recomendo) Criar uma query genérica que utiliza todos os filtros. Porem os filtros da clausula where deve utilizar o

    ISNULL(valor, campo)
    

    do proprio sql. Assim quando o parametro não for passado, o mesmo não será utilizado.

    OK?

    PS: Altere o tipo de tópico do forum de discussão para pergunta. Assim você ajuda melhorar o forum.

    Se achou que a resposta ajudou, marque como respondido.

     


    Francisco Gonçalves
    Blog: franciscogoncalves.wordpress.com
    segunda-feira, 31 de outubro de 2011 01:21
  • usa parametetros amigo. like @username. remove a class, e cria parametro no metros e chama no comando.

    prublic void pesquizar(string nomedousuario, string password, useremail)

    {

    cria os comandos aqui, 

    quando usares parametros atribui as strings que estao no metodo pesquizar.

    quando fores na camada final, usa a class user.

    }

     

    veia o meu post programando com camadas.


    One word frees us of all the weight and pain of life: that word is love.
    terça-feira, 1 de novembro de 2011 14:40
    Moderador

Todas as Respostas

  • Fala Rodrigues

    De forma alguma concatenar uma query sql é uma boa prática. Nunca utilize isso.

    O que você deve fazer é:

    1 - Passar somente os valores dos parametros para a DAL.

    2 - Deixar para a DAL a responsabilidade de incluir os parâmetros passados na query.

    Para resolver o problema desta query "dinamica". Você pode fazer de duas formas:

    1 - Criar querys especializadas com determinados filtros.

    2 - (recomendo) Criar uma query genérica que utiliza todos os filtros. Porem os filtros da clausula where deve utilizar o

    ISNULL(valor, campo)
    

    do proprio sql. Assim quando o parametro não for passado, o mesmo não será utilizado.

    OK?

    PS: Altere o tipo de tópico do forum de discussão para pergunta. Assim você ajuda melhorar o forum.

    Se achou que a resposta ajudou, marque como respondido.

     


    Francisco Gonçalves
    Blog: franciscogoncalves.wordpress.com
    segunda-feira, 31 de outubro de 2011 01:21
  • Francisco,

     

    Valeu pela dica, vou testar isso. 

    segunda-feira, 31 de outubro de 2011 10:33
  • Rodrigues,

    Altere o tipo de tópico do forum de discussão para pergunta. Assim você ajuda melhorar o forum.

    E marque a resposta como respondido.

    OK?

     


    Francisco Gonçalves
    Blog: franciscogoncalves.wordpress.com
    segunda-feira, 31 de outubro de 2011 11:58
  • Francisco,

    Eu entendi o conceito, mas na prática não consigo aplicar uma query dinâmica na camada DAO. A grosso modo falando, vamos supor que eu tenha uma instancia na camada de interface de um usuário:

    userMDL user = new userMDL();

    user.userName = txtUsername.Text.toString();

    user.userPwd = txtPassword.Text.tostring();

     

    userBLL obj = new userBLL()

    obj(user);

     

    *************************

    Já na camada DAO eu tenho a seguinte query

    SELECT * FORM tabelaUsuario WHERE userName like '%user.userName%'

    AND userPwd like '%user.userPwd%'

    AND userEmail like '%user.userEmail%'

    na camada de interface eu não atribui um valor para e-mail, mas na minha camada DAO dá erro porque eu não atribui um valor para email.

    Como eu posso atribuiur um valor null na parte WHERE dessa query?

     

    terça-feira, 1 de novembro de 2011 10:58
  • usa parametetros amigo. like @username. remove a class, e cria parametro no metros e chama no comando.

    prublic void pesquizar(string nomedousuario, string password, useremail)

    {

    cria os comandos aqui, 

    quando usares parametros atribui as strings que estao no metodo pesquizar.

    quando fores na camada final, usa a class user.

    }

     

    veia o meu post programando com camadas.


    One word frees us of all the weight and pain of life: that word is love.
    terça-feira, 1 de novembro de 2011 14:40
    Moderador