Error change with Object reference message not set for an object instance

Asked

Viewed 788 times

1

Guys I’m having the following problem.

I created a class for DTO like this:

public class PessoaFuncionario
{
    public Pessoa Pessoa { get; set; }
    public string Nome { get; set; }
    public string CPF { get; set; }
    public string CRM { get; set; }

}

She uses the other Pessoa that is so:

public class Pessoa
{
    public int IDPessoa { get; set; }
    public PessoaTipo PessoaTipo { get; set; }
}

I then created a business object with the rules to insert:

public string Alterar(PessoaFuncionario pessoaFuncionario)
{
    try
    {
        acessoDadosSqlServer.LimparParametros();                
        acessoDadosSqlServer.AdicionarParametros("@IDPessoaFuncionario", pessoaFuncionario.Pessoa.IDPessoa);
        acessoDadosSqlServer.AdicionarParametros("@Nome", pessoaFuncionario.Nome);
        acessoDadosSqlServer.AdicionarParametros("@CPF", pessoaFuncionario.CPF);
        acessoDadosSqlServer.AdicionarParametros("@CRM", pessoaFuncionario.CRM);

        string idPessoaFuncionario = acessoDadosSqlServer.ExecutarManipulacao(CommandType.StoredProcedure, "uspPessoaFuncionarioAlterar").ToString();
        return idPessoaFuncionario;
    }
    catch (Exception excpetion)
    {
        return excpetion.Message;
    }
}

And the method on the change button:

else if (acaoNaTelaSelecionada == AcaoNaTela.Alterar)
{
    PessoaFuncionario pessoaFunc = new PessoaFuncionario();
    pessoaFunc.Pessoa.IDPessoa = Convert.ToInt32(txtCodigo.Text); // << Onde aparece o erro
    pessoaFunc.Nome = txtNome.Text;
    pessoaFunc.CRM = txtCRM.Text;
    pessoaFunc.CPF = mskCPF.Text;

    PessoaFuncionarioNegocios pessoaNegocios = new PessoaFuncionarioNegocios();
    string retorna = pessoaNegocios.Alterar(pessoaFunc);

    try
    {
        int IDPessoa = Convert.ToInt32(retorna);
        MessageBox.Show("Registro atualizado com sucesso.", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    catch
    {
        MessageBox.Show("Não foi possivel alterar. Detalhes: " + retorna, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

Error occurs at the beginning of the save method.

But you’re making a mistake by saying Undefined object reference for an object instance.

I did it that way for the insert and rule out and both are functioning normally. Only the alter who is accusing this error. Could someone give me a light? Thanks in advance.

  • On which line do you accuse the error?

  • At the very beginning of the flame of the change method. Else if (acanNaTelaSelected == Acaonatela.Change) { Personal Functionwork = new Personwork(); work.Person.Idperson = Convert.Toint32(txtCodigo.Text); <<<<

1 answer

2


It is also necessary to initialize the class Pessoa.

PessoaFuncionario pessoaFunc = new PessoaFuncionario();
pessoaFunc.Pessoa.IDPessoa = Convert.ToInt32(txtCodigo.Text); // <-- erro aqui

You must do:

PessoaFuncionario pessoaFunc = new PessoaFuncionario();
pessoaFunc.Pessoa = new Pessoa(); // <-- 
pessoaFunc.Pessoa.IDPessoa = Convert.ToInt32(txtCodigo.Text);

Or initialize it in class PessoaFuncionario:

public class PessoaFuncionario
{
     public Pessoa pessoa = new Pessoa(); // <--
     public string Nome { get; set; }
     public string CPF { get; set; }
     public string CRM { get; set; }
}

And use it like this:

PessoaFuncionario pessoaFunc = new PessoaFuncionario();
pessoaFunc.pessoa.IDPessoa = Convert.ToInt32(txtCodigo.Text);
  • I tried as you said but the peopleFunc starts accusing error saying that no namespace was found or references to it. also tried Personal functionFunc = new Personstaff(); Person person = new Person(); person.Idperson = Convert.Toint32(txtCodigo.Text); personFunc.Person.Idperson = person.Idperson; But the previous error persists =/

  • @George I put that away, I posted another way too,.

  • 1

    Usei assim &#xA;&#xA; pessoaFunc.Pessoa = new Pessoa();&#xA; pessoaFunc.Pessoa.IDPessoa = Convert.ToInt32(txtCodigo.Text);&#xA; pessoaFunc.Nome = txtNome.Text;&#xA; pessoaFunc.CPF = mskCPF.Text; peopleFunc.CRM = txtCRM.Text; E worked :D Thank you very much. Vlw himself

  • 1

    As for the second council: (almost) never whether to use public Fields.

  • @dcastro Thanks for the advice. =)

Browser other questions tagged

You are not signed in. Login or sign up in order to post.