none
Erro de Instancia de Objeto RRS feed

  • Pergunta

  • Bom dia Pessoal.

    A cada dia um erro novo aparecendo e com isso eu acabo voltando aqui pra pedir ajuda a vcs!! já estou ficando com vergonha de incomodar tanto, mas vamos la.

    Na aplicação de estacionamento que estou desenvolvendo, eu configurei uma busca em um campo onde vc digita o nome e no leave e faz tal busca e coloca na listbox os carros que estao cadastrados com aquele nome ( que precisa ser mostrado no caso da entrada ser do tipo "Autorização"), acontece que ao dar entrada no veiculo, o programa esta retornando um erro de instancia de objeto apontando para uma "variavel" usada para armazenar tal item. O que posso fazer para corrigir este erro?? estou debugando o código mas por falta de experiencia nao estou encontrando. vou colocar abaixo os códigos referentes ok!!!

    Obrigado mais uma vez:

    este faz os Select´s

    public DataTable Autorizacao()
            {
                try
                {
                    return DadosEstacionamento.RetornarDataTable("SELECT placa, rfRegistro, nomeMot, dtInicio, dtTermino, definicao  FROM estacionamento.autorizacao WHERE nomeMot LIKE'%" + NomeMot + "%' ");
    
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
            }

    aqui é o código da Listbox onde aparecerá os nomes cadastrados, as quais o que eu selecionar irá dar entrada no veiculos com os dados cadastrados. O erro aparece na linha nome = ******

    if (rdbAutorizacao.Checked == true)
                {
                    verifplaca = string.Format("{0}", ltbPlaca.SelectedValue);
                    
                    verificaPlaca();
                    
                    txtPlaca.Text = verPlaca;
                    txtMarca.Text = verMarca;
                    txtModelo.Text = verModelo;
                    txtCor.Text = verCor;
                     
                    nome = ((DataRowView)ltbPlaca.SelectedItem).Row.ItemArray[2].ToString();
    
                    
    
    
                }

    E este é o código do botao registrar:

    private void btnRegistrar_Click(object sender, EventArgs e)
            {
                clsLogin.ConfirmaUser = null;
                clsRegistro cn = new clsRegistro();
    
                cn.Placa = verPlaca;
                dat = Convert.ToDateTime(lblData.Text);
                cn.DtEntrada = dat.ToString("yyyy-MM-dd");
                cn.HsEntrada = lblHora.Text;
                cn.HsSaida = "ABERTO";
                cn.TipoEntrada = tipoRegistro;
                cn.Definicao = definicao;
    
    
                if (rdbCredencial.Checked == true)
                {
                    cn.Numero = mtbNumero.Text;
                }
                if (rdbAutorizacao.Checked == true)
                {
                    cn.NomeMot = nome;   
    
                    
                }
    
                while (clsLogin.ConfirmaUser == null)
                {
                    frmConfirma frm = new frmConfirma();
                    frm.ShowDialog();
    
                    if (clsLogin.ConfirmaUser == null)
                    {
                        return;
                    }
                }
                cn.Rf = clsLogin.ConfirmaUser;
    
    
                cn.insertRegistro(cn);
                MessageBox.Show("Registro de Entrada inserido com sucesso");
                carregarGridRegistro();
                dgvEmUso.AutoResizeColumns();
                           
                
                

    sei que este erro acontece quando passamos paramentros nulos, só nao estou conseguindo encontrar onde estou fazendo isso e como corrigir.

    segunda-feira, 12 de maio de 2014 13:56

Respostas

  • Você tem uma exceção de referência nula. Eles são basicamente a mesma coisa. Você está tentando ligar para algumas funcionalidades em um objeto que não foi inicializado. Execute o código com o seu depurador e tenta ver o que é nulo. Em seguida, ajuste o seu código.

    Segue um link be explicativo de como depurar, pois ele mostra exatamente onde está o erro:

    http://weblogs.asp.net/scottguportuguese/archive/2010/08/18/dicas-de-debugging-depuracao-de-codigo-no-visual-studio-2010.aspx

    http://msdn.microsoft.com/pt-br/library/ms173083(v=vs.90).aspx

    http://msdn.microsoft.com/pt-br/library/k0k771bt.aspx

    Nesse link abaixo tem uma explicação muito boa:

    http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it

    Abraço


    terça-feira, 13 de maio de 2014 15:04
    Moderador

Todas as Respostas

  • Boa tarde Pinez,

    Não se preocupe, sempre que tiver dúvidas venha aqui para compartilha-las pois estamos aqui justamente para tentar resolve-las.

    Qual o erro gerado, se puder posta-lo fica mais fácil do pessoal te ajudar.

    Abraço


    segunda-feira, 12 de maio de 2014 15:42
    Moderador
  • Olá Ricardo, muito obrigado cara.

    Entao o erro que aparece é: "Referencia de Objeto não definida para uma instancia de um objeto"

    e aponta para este trecho do código " onde eu atribuo o datarow para a variavel nome"

    if (rdbAutorizacao.Checked == true)
                {
                    verifplaca = string.Format("{0}", ltbPlaca.SelectedValue);
                    
                    verificaPlaca();
                    
                    txtPlaca.Text = verPlaca;
                    txtMarca.Text = verMarca;
                    txtModelo.Text = verModelo;
                    txtCor.Text = verCor;
                     
                    nome = ((DataRowView)ltbPlaca.SelectedItem).Row.ItemArray[2].ToString();
    
                    
    
    
                }

    quando eu seleciono uma radiobuton que define o tipo de entrada como sendo de uma autorização.

    segunda-feira, 12 de maio de 2014 15:53
  • Oi Pinez,

    Esse erro de referência de objeto, ocorre quando está tentando acessar um objeto/propriedade que não existe.

    voce instanciou corretamente o objeto?

    segunda-feira, 12 de maio de 2014 19:43
    Moderador
  • E ai meu Brother, blza?

    Então Ricardo, o problema é que por falta de conhecimento, Eu não sei qual é esse BENDITO objeto que está passando vazio!!!

    terça-feira, 13 de maio de 2014 12:28
  • Você tem uma exceção de referência nula. Eles são basicamente a mesma coisa. Você está tentando ligar para algumas funcionalidades em um objeto que não foi inicializado. Execute o código com o seu depurador e tenta ver o que é nulo. Em seguida, ajuste o seu código.

    Segue um link be explicativo de como depurar, pois ele mostra exatamente onde está o erro:

    http://weblogs.asp.net/scottguportuguese/archive/2010/08/18/dicas-de-debugging-depuracao-de-codigo-no-visual-studio-2010.aspx

    http://msdn.microsoft.com/pt-br/library/ms173083(v=vs.90).aspx

    http://msdn.microsoft.com/pt-br/library/k0k771bt.aspx

    Nesse link abaixo tem uma explicação muito boa:

    http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it

    Abraço


    terça-feira, 13 de maio de 2014 15:04
    Moderador
  • Passos para verificar onde está o problema:

    1. Coloque um breakpoint na linha onde você seta a variavel nome.

    2. Qual o valor de "ltbPlaca.SelectedItem" no momento que o breakpoint está nessa linha ?

    3. Após isso, você foi verificando se cada uma dessas propriedades (Row,ItemArray) contém valor não nulo ?

    Poste os resultados dos itens 2 e 3 que a gente pode tratar melhor.

    Abraços !

    • Sugerido como Resposta Giovani Cr terça-feira, 13 de maio de 2014 18:24
    terça-feira, 13 de maio de 2014 16:39
  • Opa Diegão.

    Primeiro, desculpe pela demora mano e muito obrigado pela força.

    consegui resolver o problema usando o código abaixo.

    if (rdbAutorizacao.Checked == true)
                {              
                        verifplaca = string.Format("{0}", ltbPlaca.SelectedValue);
    
                        if (string.IsNullOrEmpty(verifplaca))
                        {
                            return;
                        }
    
                        verificaPlaca();
    
                        txtPlaca.Text = verPlaca;
                        txtMarca.Text = verMarca;
                        txtModelo.Text = verModelo;
                        txtCor.Text = verCor;
    
                        nome = ((DataRowView)ltbPlaca.SelectedItem).Row.ItemArray[2].ToString();            
    
                }

    Fiz a comparação acima e parou de dar o maledito erro!!

    Abraço

    terça-feira, 27 de maio de 2014 19:29