How to make a query using SELECT with conditions of LIKE '%' and Equal "=" with input of textbox and dropdowlist in C# ASP.NET

Asked

Viewed 19 times

-1

I am doing a query of people by filter, but I have come across the following problems:

1º LIKE Condition %%, (because the user will not always fill the fields "Document Number" and "Name" - returning empty "");

2º Dropdownlist when the user leaves with the option "All" or "All", it returns the Selectedvalue equal to zero '0'.

I would like the filter query to work.

Below the data model: inserir a descrição da imagem aqui Below the People Query Screen: inserir a descrição da imagem aqui Below part of the Get Personal Filterfilter method, along with the SELECT I’m using:

command.CommandText = @"SELECT ID_PESSOA, FOTO, N_DOCUMENTO, NOME,
                                           ID_TIPO_PESSOA, DESCRICAO_TIPO, ID_STATUS, DESCRICAO_STATUS,
                                           STRING_AGG(DESCRICAO_BLOCO, ',') WITHIN GROUP (ORDER BY DESCRICAO_BLOCO) AS DESCRICAO_BLOCO,
                                           STRING_AGG(NOMENCLATURA, ',') AS NOMENCLATURA
                                    FROM (
                                        SELECT  PESSOAS.ID_PESSOA, PESSOAS.FOTO, PESSOAS.N_DOCUMENTO, PESSOAS.NOME, 
                                                PESSOAS.ID_TIPO_PESSOA, TIPOS_PESSOAS.DESCRICAO_TIPO, PESSOAS.ID_STATUS, STATUS.DESCRICAO_STATUS, 
                                                BLOCOS.ID_BLOCO, BLOCOS.DESCRICAO_BLOCO,            
                                                STRING_AGG(UNIDADES.NOMENCLATURA, ',') WITHIN GROUP (ORDER BY UNIDADES.NOMENCLATURA) AS NOMENCLATURA            
                                            FROM ResidencialSolarDiLucca.dbo.PESSOAS
                                            INNER JOIN
                                            ResidencialSolarDiLucca.dbo.TIPOS_PESSOAS
                                            ON PESSOAS.ID_TIPO_PESSOA = TIPOS_PESSOAS.ID_TIPO_PESSOA
                                            INNER JOIN ResidencialSolarDiLucca.dbo.STATUS
                                            ON PESSOAS.ID_STATUS = STATUS.ID_STATUS
                                            LEFT JOIN PESSOAS_APARTAMENTOS
                                            ON PESSOAS.ID_PESSOA = PESSOAS_APARTAMENTOS.ID_PESSOA
                                            LEFT JOIN APARTAMENTOS
                                            ON PESSOAS_APARTAMENTOS.ID_APARTAMENTO = APARTAMENTOS.ID_APARTAMENTO
                                            LEFT JOIN ResidencialSolarDiLucca.dbo.BLOCOS
                                            ON APARTAMENTOS.ID_BLOCO = BLOCOS.ID_BLOCO
                                            LEFT JOIN ResidencialSolarDiLucca.dbo.UNIDADES
                                            ON APARTAMENTOS.ID_UNIDADE = UNIDADES.ID_UNIDADE
                                            WHERE STATUS.DESCRICAO_STATUS = 'Ativo'
                                            AND N_DOCUMENTO LIKE '%@N_DOCUMENTO%'
                                            AND NOME LIKE '%@NOME%'
                                            AND (PESSOAS.ID_TIPO_PESSOA IS NULL OR PESSOAS.ID_TIPO_PESSOA = @ID_TIPO_PESSOA)
                                            AND (PESSOAS.ID_STATUS IS NULL OR PESSOAS.ID_STATUS = @ID_STATUS)
                                            AND (APARTAMENTOS.ID_BLOCO IS NULL OR APARTAMENTOS.ID_BLOCO = @ID_BLOCO)
                                            AND (APARTAMENTOS.ID_UNIDADE IS NULL OR APARTAMENTOS.ID_UNIDADE = @ID_UNIDADE)
                                            GROUP BY PESSOAS.ID_PESSOA, PESSOAS.FOTO, PESSOAS.N_DOCUMENTO, PESSOAS.NOME,
                                                     PESSOAS.ID_TIPO_PESSOA, TIPOS_PESSOAS.DESCRICAO_TIPO, PESSOAS.ID_STATUS, STATUS.DESCRICAO_STATUS, BLOCOS.ID_BLOCO, DESCRICAO_BLOCO) AS X
                                    GROUP BY ID_PESSOA, FOTO, N_DOCUMENTO, NOME,
                                                ID_TIPO_PESSOA, DESCRICAO_TIPO, ID_STATUS, DESCRICAO_STATUS
                                    ORDER BY NOME";

            command.Parameters.AddWithValue("@N_DOCUMENTO", nDocumento);
            command.Parameters.AddWithValue("@NOME", nome);
            command.Parameters.AddWithValue("@ID_TIPO_PESSOA", idTipoPessoa);
            command.Parameters.AddWithValue("@ID_STATUS", idStatus);
            command.Parameters.AddWithValue("@ID_BLOCO", idBloco);
            command.Parameters.AddWithValue("@ID_UNIDADE", idUnidade);
  • I removed the first condition "STATUS.DESCRICAO_STATUS = 'Active'", as it was repeated immediately below.

  • You can edit the question to make corrections and include more information about the problem if necessary.

1 answer

0

I don’t know if that’s the best answer yet, but the one that came the closest. Instead of working with the ID I switched to the DESCRIPTIONS.

I got the data input as follows:

string nDocumento = Regex.Replace(txtNDocumento.Text.ToUpper().Trim(), "[^xX0-9,]", "");
string nome = txtNome.Text.ToUpper().Trim();            
string descricaoTipo = DdlTipoPessoa.SelectedItem.Text;                        
            if (descricaoTipo == "Todos")
            {
                descricaoTipo = "";
            }
        string descricaoStatus = DdlStatus.SelectedItem.Text;
            if (descricaoStatus == "Todos")
            {
                descricaoStatus = "";
            }
        string descricaoBloco = ddlBlocos.SelectedItem.Text;
            if (descricaoBloco == "Todos")
            {
                descricaoBloco = "";
            }
        string descricaoUnidade = ddlUnidades.SelectedItem.Text;
            if (descricaoUnidade == "Todas")
            {
                descricaoUnidade = "";
            }

I changed the WHERE conditions of SQL to:

WHERE N_DOCUMENTO LIKE '%' + @N_DOCUMENTO + '%'
AND NOME LIKE '%' + @NOME + '%'       
AND (PESSOAS.ID_TIPO_PESSOA IS NULL OR TIPOS_PESSOAS.DESCRICAO_TIPO LIKE '%' + @DESCRICAO_TIPO + '%')
AND (PESSOAS.ID_STATUS IS NULL OR STATUS.DESCRICAO_STATUS LIKE '%' + @DESCRICAO_STATUS + '%')
AND (APARTAMENTOS.ID_BLOCO IS NULL OR BLOCOS.DESCRICAO_BLOCO LIKE '%' + @DESCRICAO_BLOCO + '%')
AND (APARTAMENTOS.ID_UNIDADE IS NULL OR UNIDADES.NOMENCLATURA LIKE '%' + @NOMENCLATURA + '%')
  • Please provide additional details in your reply. As it is currently written, it is difficult to understand your solution.

Browser other questions tagged

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