none
Stored Procedure de Pesquisar usando dois campos VARCHAR RRS feed

  • Pergunta

  • Fiz uma Stored Procedure pra pesquisar dados de dois campos, sendo pesquisar por CÓDIGO e pesquisar por DESCRIÇÃO na mesma PROCEDURE. No banco deu certo, consigo pesquisar numa boa. mas na parte de implementação de código no FORM não estou conseguindo. Se alguém puder me ajudar agradeço muito.

    Código na Procedure:

    PROCEDURE [dbo].[upsProdutoConsultarCodigoDescricao]
    	@Codigo VARCHAR(10) = NULL,
    	@Descricao VARCHAR(150) = NULL
    AS
    BEGIN
    	SELECT 
    		IDProduto,
    		Codigo,
    		Descricao,
    		Unidade,
    		Quantidade,
    		ValorUnitario
    	FROM
    		tblProduto
    
    	WHERE
    		(@Codigo IS NULL OR Codigo = @Codigo) AND
    		(@Descricao IS NULL OR Descricao LIKE '%' + @Descricao + '%')
    END

    Só lembrando, não é uma pesquisa por ID.

    CÓDIGO NA CLASE

     public ProdutoColecao Consultar(string codigo, string descricao)
            {
                ProdutoColecao produtoColecao = new ProdutoColecao();
                acessoDados.LimparParametros();
    
                if (codigo != null)
                {
                    acessoDados.AdicionarParametros("@Codigo", codigo);
                }
    
                if (descricao != null)
                {
                    acessoDados.AdicionarParametros("@Descricao", descricao);
                }
    
                DataTable dataTableProduto = acessoDados.ExecutarConsulta(CommandType.StoredProcedure, "upsProdutoConsultarCodigoDescricao");
    
                foreach (DataRow dataRow in dataTableProduto.Rows)
                {
                    Produto produto = new Produto
                    {
                        IDProduto = Convert.ToInt32(dataRow["IDProduto"]),
                        Codigo = Convert.ToString(dataRow["Codigo"]),
                        Descricao = Convert.ToString(dataRow["Descricao"]),
                        Unidade = Convert.ToString(dataRow["Unidade"]),
                        Quantidade = Convert.ToInt32(dataRow["Quantidade"]),
                        ValorUnitario = Convert.ToDecimal(dataRow["ValorUnitario"])
                    };
                    produtoColecao.Add(produto);
                }
                    return produtoColecao;
            }

    E CÓDIGO NO FORM (EVENTO BUTTON) 

     private void BtnPesquisar_Click(object sender, EventArgs e)
            {
                ProdutoNegocios produtoNegocios = new ProdutoNegocios();
    
                ProdutoColecao produtoColecao = new ProdutoColecao();
    
                
                if (TxtPesquisa.Text = true)
                {
                    produtoColecao = produtoNegocios.Consultar(TxtPesquisa.Text, null);
                }
                else
                {
                    produtoColecao = produtoNegocios.Consultar(null, TxtPesquisa.Text);
                }
    
                DgwProduto.DataSource = null;
                DgwProduto.DataSource = produtoColecao;       
    
                DgwProduto.Update();
                DgwProduto.Refresh();
    
            }

    O erro ocorre nessa parte do if, deixei assim mesmo pra analise

    sexta-feira, 24 de agosto de 2018 20:40

Respostas

  • Boa noite.

    Marcelo, fiz um exemplo rápido, vê se te atende.

    SQL

    CREATE PROCEDURE Msdn1
    @NameField NVARCHAR(50), @Display NVARCHAR(50) 
    AS
    BEGIN
    	SET NOCOUNT ON;
    	SELECT * FROM FieldDocument 
    	WHERE (NameField LIKE '%' + @NameField + '%' OR NameField = @NameField) 
    	AND (Display LIKE '%' + @Display + '%' OR Display = @Display)
    	
    END


    C#

            private void button1_Click(object sender, EventArgs e)
            {
                LinqDataEntryDataContext linq = new LinqDataEntryDataContext();
    
                string campo = string.IsNullOrEmpty(txtNomeCampo.Text) ? "" : txtNomeCampo.Text;
                string display = string.IsNullOrEmpty(txtDisplay.Text) ? "" : txtDisplay.Text;
    
                var dados = linq.Msdn1(campo, display).ToList();
                dataGridView1.DataSource = dados;
    
            }




    sábado, 25 de agosto de 2018 02:35

Todas as Respostas

  • Boa noite, Marcelo. Seria legal se você nos mostra-se a descrição do erro.
    sábado, 25 de agosto de 2018 01:56
  • Boa noite.

    Marcelo, fiz um exemplo rápido, vê se te atende.

    SQL

    CREATE PROCEDURE Msdn1
    @NameField NVARCHAR(50), @Display NVARCHAR(50) 
    AS
    BEGIN
    	SET NOCOUNT ON;
    	SELECT * FROM FieldDocument 
    	WHERE (NameField LIKE '%' + @NameField + '%' OR NameField = @NameField) 
    	AND (Display LIKE '%' + @Display + '%' OR Display = @Display)
    	
    END


    C#

            private void button1_Click(object sender, EventArgs e)
            {
                LinqDataEntryDataContext linq = new LinqDataEntryDataContext();
    
                string campo = string.IsNullOrEmpty(txtNomeCampo.Text) ? "" : txtNomeCampo.Text;
                string display = string.IsNullOrEmpty(txtDisplay.Text) ? "" : txtDisplay.Text;
    
                var dados = linq.Msdn1(campo, display).ToList();
                dataGridView1.DataSource = dados;
    
            }




    sábado, 25 de agosto de 2018 02:35