Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

leonardoFelipe

Consulta SqlDataAdapter com Parâmetros

Recommended Posts

Boa tarde pessoal.

Estou tendo dificuldades no retorno de uma consulta no banco de dados utilizando SqlDataAdapter com parâmetros.

Bem, eu tenho uma aplicação em camadas, na minha View quando acesso pela primeira vez alimento uma GridView com uma consulta (esta parte tá ok)!

Nesta mesma View tem um campo para pesquisar e filtrar nesta mesma GridView, atualizando-a com esta filtragem, e que usa o mesmo método. Aí que dá o erro, utilizei alguns exemplos que achei na net mas não tá dando certo.

Quando entra na linha dentro o if que tem o código a seguir, entra no catch:
adapter.SelectCommand.Parameters.Add(new SqlParameter("@nome", pessoa.Nome));

O erro informado no catch é o seguinte:
{System.NullReferenceException: Referência de objeto não definida para uma instância de um objeto.

Como eu poderia adicionar este parâmetro da forma correta?

Segue o código:

public DataTable listarPessoas(PessoaModel pessoa = null)
        {
            try
            {
                conectar();

                queryString = "SELECT * FROM [crud].[dbo].[Pessoas]";

                if (pessoa.Nome != null)
                    queryString += " WHERE pess_nome LIKE '%@nome%'";

                SqlCommand sqlCmd = new SqlCommand(queryString, conn);
                DataSet ds = new DataSet();
                SqlDataAdapter adapter = new SqlDataAdapter();

                if (pessoa.Nome != null)
                    adapter.SelectCommand.Parameters.Add(new SqlParameter("@nome", pessoa.Nome));

                conn.Open();
                adapter.SelectCommand = sqlCmd;
                adapter.Fill(ds);
                DataTable dt = ds.Tables[0];

                return dt;
            }
            catch (Exception erro)
            {
                throw erro;
            }
            finally
            {
                conn.Close();
            }
        }

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Indiferente, essa classe que você está passando está instanciada?

 

Sim na camada anterior! Instancio ela no controller atribuo o valor ao atributo pessoa.Nome e depois chamo este método passando o Objeto pessoModel como parâmetro.

 

Ao entrar neste método o atributo pessoa.Nome está exatamente com o valor que o foi atribuído.

 

Resumindo pessoa.Nome quando eu acesso a primeira vez a tela está vazio (null), como deveria está, e quando mando pesquisar pessoa.Nome está "valorizado" , ou seja não null.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal!

 

Bem, acabei recebendo ajuda de um amigo e ele me ajudou com o código, no fim não usei SqlDataAdapter, ficando assim o código:

 

public DataTable listarPessoas(PessoaModel pessoaModel)
        {
            string queryString = "SELECT * FROM [Crud].[dbo].[Pessoas]";

            if (pessoaModel != null)
                if (pessoaModel.Id != 0)
                    queryString += " WHERE pess_id = @id";
                else if(!string.IsNullOrEmpty(pessoaModel.Nome))
                    queryString += " WHERE pess_nome LIKE @nome";

            try
            {
                conectar();

                SqlCommand command = new SqlCommand(queryString, conn);

                if (pessoaModel != null)
                    if (pessoaModel.Id != 0)
                        command.Parameters.AddWithValue("@id", pessoaModel.Id);
                    else if (!string.IsNullOrEmpty(pessoaModel.Nome))
                        command.Parameters.AddWithValue("@nome", '%' + pessoaModel.Nome + '%');

                SqlDataReader reader = command.ExecuteReader();
                DataTable dt = new DataTable();

                dt.Load(reader);
                reader.Close(); // Fecha o DataReader

                return dt;
            }
            catch (SqlException)
            {
                return null; // em caso de Exceções retorna null 
            }
            finally
            {
                conn.Close(); // Fecha a conexão com o banco de dados 
            }

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.