none
Inserindo valor no parâmetro via código (C#) RRS feed

  • Pergunta

  • Minha dúvida é a seguinte :

    Eu tenho um select configurado no Dataset que é usado pelo Report para geração de relatório, esse select é assim :

    SELECT matricula, cpf, nome FROM CLIENTE
    WHERE dtMatricula > @dtMatricula

    Ou seja, quero gerar um relatório que tenha todos os clientes que foram matriculados posteriormente a data que irei passar como parâmetro.

    ... Como fazer isso? Programando é fácil fazer (é só trocar o valor do parâmetro), mas meu problema é fazer que o cliente digite esse valor, e para isso eu preciso saber como eu consigo, via codigo, fazer um parametro receber um valor do texto de um TextBox.

    [Alguns detalhes: O nome do meu DataSet é "dsCliente", e tem um "dsClienteTableAdapter" que possui o select que mencionei, a pagina que possui o ReportView é relClienteDtMatricula]

    quinta-feira, 6 de dezembro de 2007 12:11

Respostas

  • A vantagem de colocar na procedure é desacoplar a query do seu report.

     

    Mas neste caso especificamente, outra alterativa é criar um parametro com lista:

    "Ativo" - 1

    "Inativo" - 2

     

    E usar uma query parecida com essa:

    SELECT matricula, cpf, nome
        FROM CLIENTE
        WHERE (dtSaida IS NOT NULL AND @parm=1) OR  (dtSaida IS NULL AND @parm=2)

     

    Seu usuário irá poder escolher entre Ativo/Inativo em uma combo na interface do relatório e você teria todas as opções no seu proprio RDL.

     

    De qualquer forma isso é possível porque só tem duas variações na query, você pode precisar alterar no futuro e talvez não seja tão simples criar uma solução equivalente na condição da query. Sem contar que você provavelmente perde em desempenho por usar uma condição mais complexa Wink

     

    Att

    Boreki

    quinta-feira, 6 de dezembro de 2007 21:44

Todas as Respostas

  • Descobri, po tava viajando aqui.

    So que ainda estou com muitos problemas..

    A minha where pode se alterar da seguinte forma:

    dtMatricula is NULL

    ou

    dtMatricula is NOT NULL

    como posso fazer isso? tipo, como posso passar um parametro que receba NULL ou NOT NULL?
    quinta-feira, 6 de dezembro de 2007 14:06
  • http://www.c-sharpcorner.com/UploadFile/chauhan_sonu57/SQLReportingServices03032006002905AM/SQLReportingServices.aspx

     

    Crie uma procedure com um parametro que indica se a matricula será NULL ou NOT NULL....

    Receba o parametro e monte a query de acordo com o resultado esperado.

    Abraço

    quinta-feira, 6 de dezembro de 2007 16:00
  • Olha oq tive que fazer ...

    PS : Substitui o dtMatricula para dtSaida

    ALTER PROCEDURE dbo.X
        @opcao AS VARCHAR(1)
    AS

    IF (@opcao = 'A')
    --opcao = A, significa Cliente ativo, ou seja Data de Saída vazia.
    BEGIN
        SELECT matricula, cpf, nome
        FROM CLIENTE
        WHERE dtSaida is NULL
    END
    ELSE
    BEGIN
        SELECT matricula, cpf, nome
        FROM CLIENTE
        WHERE dtSaida is NOT NULL
    RETURN

    É assim mesmo que se deve fazer?

    Fico muito feio isso, alguem tem como dar uma dica para melhorar?
    quinta-feira, 6 de dezembro de 2007 16:46
  • hehehe... acho que nesse caso não tem muito que fazer...

    Abraço

    quinta-feira, 6 de dezembro de 2007 18:45
  • A vantagem de colocar na procedure é desacoplar a query do seu report.

     

    Mas neste caso especificamente, outra alterativa é criar um parametro com lista:

    "Ativo" - 1

    "Inativo" - 2

     

    E usar uma query parecida com essa:

    SELECT matricula, cpf, nome
        FROM CLIENTE
        WHERE (dtSaida IS NOT NULL AND @parm=1) OR  (dtSaida IS NULL AND @parm=2)

     

    Seu usuário irá poder escolher entre Ativo/Inativo em uma combo na interface do relatório e você teria todas as opções no seu proprio RDL.

     

    De qualquer forma isso é possível porque só tem duas variações na query, você pode precisar alterar no futuro e talvez não seja tão simples criar uma solução equivalente na condição da query. Sem contar que você provavelmente perde em desempenho por usar uma condição mais complexa Wink

     

    Att

    Boreki

    quinta-feira, 6 de dezembro de 2007 21:44
  • Eu não entendi direito oq vc falo sobre desempenho, tipo, vc me aconselharia a fazer do meu jeito (com uma query gigantesca) ou do seu jeito (resolvendo dentro do WHERE)?
    sexta-feira, 7 de dezembro de 2007 12:31
  • Que bonito isso! Smile

    Ótima lógica!

    Abraço
    sexta-feira, 7 de dezembro de 2007 12:49
  • Com certeza a procedure Smile

    sexta-feira, 7 de dezembro de 2007 17:00
  • Maior query que ja fiz ahehaehaehae.

    Minha query deu umas 200 linhas.
    sexta-feira, 7 de dezembro de 2007 17:16