Usuário com melhor resposta
Programação em Camadas DAO

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??
- Editado rodrigues.sud domingo, 30 de outubro de 2011 23:49 melhor explicação
- Tipo Alterado Levi DomingosModerator terça-feira, 1 de novembro de 2011 14:40
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- Sugerido como Resposta Francisco Gonçalves terça-feira, 1 de novembro de 2011 15:05
- Marcado como Resposta Levi DomingosModerator domingo, 6 de novembro de 2011 17:25
-
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.- Marcado como Resposta Levi DomingosModerator domingo, 6 de novembro de 2011 17:25
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- Sugerido como Resposta Francisco Gonçalves terça-feira, 1 de novembro de 2011 15:05
- Marcado como Resposta Levi DomingosModerator domingo, 6 de novembro de 2011 17:25
-
-
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- Sugerido como Resposta Francisco Gonçalves terça-feira, 1 de novembro de 2011 15:04
-
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?
- Sugerido como Resposta Francisco Gonçalves terça-feira, 1 de novembro de 2011 15:04
- Não Sugerido como Resposta Francisco Gonçalves terça-feira, 1 de novembro de 2011 15:04
-
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.- Marcado como Resposta Levi DomingosModerator domingo, 6 de novembro de 2011 17:25