none
Erro: Nenhum valor foi fornecido para um ou mais parâmetros necessários RRS feed

  • Pergunta

  • Pessoal, eu quero mostrar, numa Label, o nome do usuário cadastrado na tabela de clientes. Porém na hora de "puxar" esse dado do BD surge a mensagem de erro:

    "Nenhum valor foi fornecido para um ou mais parâmetros necessários."

    Veja os códigos:

    SQL e método:

    (...)

    string stringConexao = mtds.caminhoBD();
    string strSQL = "SELECT nome FROM Clientes WHERE (cpf = @cpf) OR (rg = @rg)";

    LeNome(stringConexao, strSQL);

    (...)

     

    Método:

     

    public void LeNome(string connectionString, string queryString)
     {
        using (OleDbConnection connection = new OleDbConnection(connectionString))
                {
                    OleDbCommand command = new OleDbCommand(queryString, connection);

                    if (rbCPF.Checked == true)
                    {
                        command.Parameters.AddWithValue("@cpf", mtbCPFRG.Text);
                    }
                    else
                    {
                        command.Parameters.AddWithValue("@rg", mtbCPFRG.Text);
                    }
                    connection.Open();


                    OleDbDataReader reader = command.ExecuteReader();

                    if (reader.HasRows)
                    {
                        while (reader.Read())
                        {
                            lbNome.Text = reader["nome"].ToString();                       
                        }
                        reader.Close();
                    }
                    else
                    {
                        lbNome.Text = "< Cliente não cadastrado >";
                    }
                }
            }

     

    Onde pode estar o erro? Já tentei de tudo, mas não consegui consertar o bug. Obrigado.


    Insistir sempre, desistir jamais!
    sexta-feira, 4 de novembro de 2011 21:41

Respostas

  • Boa noite Junior,

    o problema é que sua lógico especifica sempre um único parâmetro, mas sua query espera dois.

    Sugiro que você altere sua query:

    SELECT nome FROM Clientes WHERE (cpf = @cpf OR @cpf IS NULL) OR (rg = @rg OR @rg IS NULL)
    

    E seu código:

     if (rbCPF.Checked == true)
    {
        command.Parameters.AddWithValue("@cpf", mtbCPFRG.Text);
        command.Parameters.AddWithValue("@rg", null);
    }
    else
    {
        command.Parameters.AddWithValue("@rg", mtbCPFRG.Text);
        command.Parameters.AddWithValue("@cpf", null);
    }
    


    Abraços,


    Daniel Cheida de Oliveira
    sexta-feira, 4 de novembro de 2011 22:28
  • Bom dia Junior !

     

    Troque o null pelo DBNull.

    command.Parameters.AddWithValue("@rg",  DBNull.Value);
    
    É importante verificar no seu database se o campo  que receberá o valor null permite tal operação.

     


    Harley Araujo - Microsoft LATAM Forum Support Engineer.
    Blog: http://www.forumguys.com.br/
    terça-feira, 8 de novembro de 2011 12:31
    Moderador

Todas as Respostas

  • Boa noite Junior,

    o problema é que sua lógico especifica sempre um único parâmetro, mas sua query espera dois.

    Sugiro que você altere sua query:

    SELECT nome FROM Clientes WHERE (cpf = @cpf OR @cpf IS NULL) OR (rg = @rg OR @rg IS NULL)
    

    E seu código:

     if (rbCPF.Checked == true)
    {
        command.Parameters.AddWithValue("@cpf", mtbCPFRG.Text);
        command.Parameters.AddWithValue("@rg", null);
    }
    else
    {
        command.Parameters.AddWithValue("@rg", mtbCPFRG.Text);
        command.Parameters.AddWithValue("@cpf", null);
    }
    


    Abraços,


    Daniel Cheida de Oliveira
    sexta-feira, 4 de novembro de 2011 22:28
  • Olá Daniel!

    Fiz as modificações propostas por você no entanto a mensagem de erro

    "O parâmetro @rg não tem valor padrão." aparece.

     


    Insistir sempre, desistir jamais!
    sexta-feira, 4 de novembro de 2011 22:40
  • Bom dia Junior !

     

    Troque o null pelo DBNull.

    command.Parameters.AddWithValue("@rg",  DBNull.Value);
    
    É importante verificar no seu database se o campo  que receberá o valor null permite tal operação.

     


    Harley Araujo - Microsoft LATAM Forum Support Engineer.
    Blog: http://www.forumguys.com.br/
    terça-feira, 8 de novembro de 2011 12:31
    Moderador