Dúvida Classe ADO.NET - Acessando dados de um DataTable

17/07/2018

0

Olá, boa noite, sou novo por aqui no fórum e um iniciante na programação C#, não sei se aqui seria o melhor lugar para esse tipo de dúvida, mas lá vai...

Estou desenvolvendo um sistema CRUD de discos de vinil (um vicio particular hahaha), utilizando classes ADO.NET, similar ao artigo postado aqui no site. Entretanto não estou conseguindo avançar em meu projeto rs, estou tentando realizar uma pesquisar através do nome do álbum e ou do nome do artista/banda, através de um formulário, porém não estou conseguindo ter êxito em minha pesquisa.

Segue parte do meu projeto:

1) Classe ConsultaAlbum, onde retorna um DataTable.

    class ConsultaAlbum
    {
        DataAccess dataAccess = new DataAccess();

        public DataTable ConsultarAlbum(string pesquisaAlbum, string pesquisaArtista)
        {
            // Limpando os parãmetros
            dataAccess.LimparParametros();
            string SQL = @"SELECT 
                                           A.ID AS ID, 
                                           AR.ARTISTA AS ARTISTA, 
                                           GR.GRAVADORA AS GRAVADORA, 
                                           A.ALBUM AS ALBUM, 
                                           A.ANO AS ANO, 
                                           A.GENERO AS GENERO, 
                                           A.PRENSAGEM AS PRENSAGEM, 
                                           A.CORVINIL AS COR, 
                                           A.FORMATO AS FORMATO, 
                                           A.ROTACAO ROTACAO, 
                                           A.IMAGEM AS IMAGEM, 
                                           A.FLAG AS FLAG 
                           FROM 
                                           ALBUM AS A 
                                           INNER JOIN ARTISTA AS AR ON (A.ID_ARTISTA = AR.ID) 
                                           INNER JOIN GRAVADORA AS GR ON (A.ID_GRAVADORA = GR.ID)
                           WHERE 
                                           FLAG = ''''''''A'''''''' AND 
                                           UPPER(ALBUM) LIKE ''''''''%@PESQUISA_ALBUM%'''''''' OR                                           
                                           UPPER(ARTISTA) LIKE''''''''%@PESQUISA_ARTISTA%''''''''";
            // Adicionando novos parâmetros
            dataAccess.AdicionarParametro("@PESQUISA_ALBUM", SqlDbType.VarChar, pesquisaAlbum);
            dataAccess.AdicionarParametro("@PESQUISA_ARTISTA", SqlDbType.VarChar, pesquisaArtista);
            // Retorna um DataTable com os dados da consulta
            return dataAccess.ExecutaConsulta(SQL);
        }

    }


2)Botão Pesquisar, provavelmente aqui esta o meu problema, onde não estou conseguindo realizar a pesquisa, por não obter nenhum dado no DataTable, os dados vem de um retorno DataTable da classe acima, onde passo por parâmetro o nome do artista e ou do álbum, abaixo é um exemplo de como estou tentando realizar a pesquisa, através de um foreach e acessando suas linhas, apenas de como estou tentando realizar a pesquisa.

public partial class Consultar : UserControl
{
            ConsultaAlbum consulta = new ConsultaAlbum();
            Album album = new Album();

            string pesquisaAlbum = "";
            string pesquisaArtista = "";
                                   
            pesquisaAlbum = txtPesquisarAlbum.Text;
            pesquisaArtista = txtPesquisarArtista.Text;

            //Pega os valores dos campos e seta nas propriedades das classes Artista, Gravadora e Album 
            consulta.ConsultarAlbum(pesquisaAlbum, pesquisaArtista);

            album.Artista = txtArtista.Text;
            txtAlbum.Text = album.NomeAlbum;
            txtGenero.Text = album.Genero;
            txtPrensagem.Text = album.Prensagem;
            txtGravadora.Text = album.Gravadora;
            //Tratar exceção!!
            //album.Ano = Convert.ToInt32(txtAno.Text);
            txtCor.Text = album.Cor;
            //Tratar exceção!!
            //(rButtonLp.Checked) ? "LP" : "EP" = album.Formato;
            //(rButton33.Checked) ? "33" : "45" = album.Rotacao;
            //Falta validar imagem em branco antes de salvar !!
            pictureVinyl.ImageLocation = album.Imagem;
            
}


3) Classe Album

    class Album
    {
        [Required]
        public int Id { get; set; }

        [Required(ErrorMessage = "Nome do álbum obrigatório")]
        [RegularExpression(@"^[0-9a-zA-Z''''''''''''''''-''''''''\\\\\\\\\\\\\\\\s]{1,100}$", ErrorMessage = "Nome inválido")]
        public string NomeAlbum { get; set; }


        [RegularExpression(@"^[0-9a-zA-Z''''''''''''''''-''''''''\\\\\\\\\\\\\\\\s]{1,100}$", ErrorMessage = "Gênero inválido")]
        public string Genero { get; set; }

        [RegularExpression(@"^[0-9a-zA-Z''''''''''''''''-''''''''\\\\\\\\\\\\\\\\s]{1,100}$", ErrorMessage = "Prensagem inválida")]
        public string Prensagem { get; set; }

        [Required(ErrorMessage = "Ano do álbum obrigatório")]
        [RegularExpression(@"^[0-9''''''''''''''''-''''''''\\\\\\\\\\\\\\\\s]{4,4}$", ErrorMessage = "Ano inválido")]
        public int Ano { get; set; }

        [RegularExpression(@"^[a-zA-Z''''''''''''''''-''''''''\\\\\\\\\\\\\\\\s]{1,100}$", ErrorMessage = "Cor inválida")]
        public string Cor { get; set; }

        [Required]
        public string Formato { get; set; }

        [Required]
        public string Rotacao { get; set; }

        public string Imagem { get; set; }

        public string Flag { get; set; }

        public string Artista { get; set; }


        public string Gravadora { get; set; }

    }


Estou desenvolvendo esse projeto de maneira autodidata, e aprendendo muito com o que pesquiso, cursos online e artigos publicados aqui no site.
Desde já, agradeço qualquer ajuda. obrigado =)

***Artigo utilizando para a criação da classe DataAccess ADO.NET:
https://www.devmedia.com.br/desenvolvendo-uma-classe-ado-net-para-acesso-a-dados-sql-server/32336
Fábio Monteiro

Fábio Monteiro

Responder

Posts

31/07/2018

Carlos Augusto

Oi,

Não sei se o seu código na hora de colar ficou errado.
WHERE
FLAG = ''''''''A'''''''' AND
UPPER(ALBUM) LIKE ''''''''%@PESQUISA_ALBUM%'''''''' OR
UPPER(ARTISTA) LIKE''''''''%@PESQUISA_ARTISTA%''''''''";
Acredito que o erro esteja aqui.
WHERE
FLAG = ''''''''A'''''''' AND
UPPER(ALBUM) LIKE @PESQUISA_ALBUM OR
UPPER(ARTISTA) LIKE @PESQUISA_ARTISTA;

Como eu não tenho acesso a sua classe DataAcess eu acredito que ele troca o que tem @ pelo que você quer.
O correto seria neste trecho:
Trocar de:
public DataTable ConsultarAlbum(string pesquisaAlbum, string pesquisaArtista)
{
// Limpando os parãmetros
dataAccess.LimparParametros();

Para :
public DataTable ConsultarAlbum(string pesquisaAlbum, string pesquisaArtista)
{
// Limpando os parãmetros
dataAccess.LimparParametros();
pesquisaAlbum = string.Concat("%",pesquisaAlbum,"%");
pesquisaArtista= string.Concat("%",pesquisaArtista,"%");

Os % tem que ficar dentro da string e não da query.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar