none
Preciso de ajuda!!! -> Object reference not set to an instance of an object. C# RRS feed

  • Pergunta

  • Pessoal,

    Estou tentando escrever alguns campos em um arquivo txt com dados da minha estrutura de dados que tenho, mas quando rodo da esse erro -> Object reference not set to an instance of an object.

    Alguem poderia me ajudar, pois tenho um objeto "tabela" que instanciei no Form1 e ele é quem faz a ligação com a classe dos dados "Estrutura.cs", estou utilizando esse objeto via parametro na classe que gera a escrita no arquivo txt, mas não ta dando certo!!!

    Segue codigo:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.SqlClient;
    using System.Data.SqlTypes;
    using System.Data;
    using System.Data.Sql;
    using System.Net;
    using System.ComponentModel;
    using System.Drawing;
    using System.Windows.Forms;
    using System.Threading;
    using System.Configuration;
    using System.IO;

    namespace Controle_de_Portaria
    {
        public class GeraArquivo
        {
            public static void GeraArquivoEntrada(Estrutura tabela) //certo
            {
                string sLinha1 = "";
                string sLinha2 = "";
                string sLinha3 = "";
                string sLinha4 = "";
                string sLinha5 = "";

                for (Int64 index = 1; index != 0; index++)
                {
                    string fileName = string.Format(@"C:\\scanner\{0}.txt", index.ToString().PadLeft(10, '0'));

                    if (!System.IO.File.Exists(fileName))
                    {
                        try
                        {
                            using (System.IO.StreamWriter sw = new System.IO.StreamWriter(fileName))
                            {
                                //Gera Cabeçalho
                                sLinha1 = "INI" + DateTime.Now.ToString("yyyyMMddhhmmss");
                                sw.Write(sLinha1);

                                //Gera EVE96
                                sLinha2 = "EVE96" +
                                /*NUMERO SEQUENCIAL*/ DateTime.Now.ToString("hhmmssMMyyyy") +
                                tabela.NUMCPF.ToString().PadRight(18, ' ').Substring(0, 17) +
                                tabela.NOMUSUARIO.ToString().PadRight(29, ' ').Substring(0, 28);
                                sw.Write(sLinha2);

                                //Gerar MVI
                                sLinha3 = "MVI" + "I".PadRight(1, ' ').Substring(0, 1) +
                                          DateTime.Now.ToString("ddMMyyyyhhmmss") +
                                          /*IDENTIFICADOR DO DOCUMENTO SE CPF, RG, ETC*/
                                          tabela.NUMDOCUMENTO.ToString().PadRight(34, ' ').Substring(0, 33) +
                                          tabela.NOMEMISSOR.ToString().PadRight(45, ' ').Substring(0, 44) +
                                          tabela.TPPESSOA.ToString().PadRight(60, ' ').Substring(0, 60) +
                                          tabela.NOMVISITANTE.ToString().PadRight(61, ' ').Substring(0, 60) +
                                          tabela.NUMCNH.ToString().PadRight(86, ' ').Substring(0, 85);
                                          /*N° MATRICULA DO FISCAL */
                                          /*SEQUENCIAL DA MOVIMENTAÇÃO*/
                                sw.Write(sLinha3);                                                   

                                //Gera FEV
                                sLinha4 = "FEV003";
                                sw.Write(sLinha4);
                               
                                //Gera Rodapé
                                sLinha5 = "FIM005";
                                sw.Write(sLinha5);
                            }
                            MessageBox.Show("Arquivo gerado com sucesso!!!");
                            return;
                        }
                        catch (Exception ex)
                        {
                            throw new Exception("Erro ao criar o arquivo, avise o Suporte!", ex);
                        }
                    }
                }
            }
        }
    }

    Segue a chamada:

    private void btentrada_Click(object sender, EventArgs e)
            {  
                Estrutura tabela = new Estrutura();
     
                GeraArquivo.GeraArquivoEntrada(tabela);
            }

    O que pode estar ocorrendo em???

    Desde já muito obrigado!!!


    Luiz Carlos

    segunda-feira, 23 de abril de 2012 12:19

Respostas

  • Cara, segundo esse código:

    private void btentrada_Click(object sender, EventArgs e)
            {   
                Estrutura tabela = new Estrutura();
     
                GeraArquivo.GeraArquivoEntrada(tabela);
            }

    Como você está instanciando a Estrutura sem setar as propriedades dela, portanto, as propriedades do tipo String está NULAS sim.

     tabela.NOMUSUARIO.ToString().PadRight(29, ' ').Substring(0, 28)
    Vai dar erro no NOMUSUARIO.ToString() pois (segundo o código que postou) a propriedade NOMUSUARIO está nula.


    Take a look at WPF FlashMessage

    • Marcado como Resposta LC-Locker segunda-feira, 23 de abril de 2012 14:07
    segunda-feira, 23 de abril de 2012 13:44

Todas as Respostas

  • Está faltando instanciar algum objeto.

    Em qual classe está ocorrendo o erro?


    If was useful mark as answered. Mariano, Paulo T. C.

    segunda-feira, 23 de abril de 2012 12:25
  • Bom dia,

    Nesta classe -> public class GeraArquivo

    Esta linha esta ok ->  //Gera Cabeçalho
                                sLinha1 = "INI" + DateTime.Now.ToString("yyyyMMddhhmmss");
                                sw.Write(sLinha1);

    Daqui ja da o erro -> //Gera EVE96
                                sLinha2 = "EVE96" +
                                /*NUMERO SEQUENCIAL*/ DateTime.Now.ToString("hhmmssMMyyyy") +
                                tabela.NUMCPF.ToString().PadRight(18, ' ').Substring(0, 17) +
                                tabela.NOMUSUARIO.ToString().PadRight(29, ' ').Substring(0, 28);
                                sw.Write(sLinha2);

                                //Gerar MVI
                                sLinha3 = "MVI" + "I".PadRight(1, ' ').Substring(0, 1) +
                                          DateTime.Now.ToString("ddMMyyyyhhmmss") +
                                          /*IDENTIFICADOR DO DOCUMENTO SE CPF, RG, ETC*/
                                          tabela.NUMDOCUMENTO.ToString().PadRight(34, ' ').Substring(0, 33) +
                                          tabela.NOMEMISSOR.ToString().PadRight(45, ' ').Substring(0, 44) +
                                          tabela.TPPESSOA.ToString().PadRight(60, ' ').Substring(0, 60) +
                                          tabela.NOMVISITANTE.ToString().PadRight(61, ' ').Substring(0, 60) +
                                          tabela.NUMCNH.ToString().PadRight(86, ' ').Substring(0, 85);
                                          /*N° MATRICULA DO FISCAL */
                                          /*SEQUENCIAL DA MOVIMENTAÇÃO*/
                                sw.Write(sLinha3);  

    Eu achei que erra o objeto "tabela", mas vejo que ele esta ok!!!                                     


    Luiz Carlos

    segunda-feira, 23 de abril de 2012 12:39
  • Vários lugares podem ocorrer esse erro, sugiro você tratar melhor o seu código para evitar isso:

     tabela.NUMCPF.ToString().PadRight(18, ' ').Substring(0, 17)

    - se NUMCPF estiver nulo, o erro vai acontecer no .ToString().

    - se o resultado de PadRight(18, ' ') retornar nulo, o erro vai acontecer quando chamar .Substring(...).

    A mesma coisa para a linha

    tabela.NOMUSUARIO.ToString().PadRight(29, ' ').Substring(0, 28)

    - verifique se NOMUSUARIO está nulo.


    Take a look at WPF FlashMessage

    segunda-feira, 23 de abril de 2012 12:57
  • Bom dia Joba,

    Acredito não estar Nulo esses campos...

    Não sei se ajuda, mas minha estrutura é essa:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace Controle_de_Portaria
    {
        public class Estrutura
        {
            
                 public int IDVISITANTE { get; set; }
                 public string TPPESSOA { get; set; }
                 public string NUMDOCUMENTO { get; set; }
                 public string NOMEMISSOR { get; set; }
                 public string NOMVISITANTE { get; set; }
                 public string NOMEMPRESA { get; set; }
                 public string NUMCRACHA { get; set; }
                 public string TPDESTINO { get; set; }
                 public string DTPORTARIA { get; set; }
                 public string NUMCNH { get; set; }
                 public string TPTRANSPORTE { get; set; }
                 public string HHPORTARIA { get; set; }
                 public string NUMPLACA { get; set; }
                 public string TPOPERACAO { get; set; }
                 public string TPDOC { get; set; }
                 public byte FOTO { get; set; }
                 public int IDUSUARIO { get; set; }
                 public string NOMUSUARIO { get; set; }
                 public string NUMCPF { get; set; }
                 public string LOGIN { get; set; }
                 public string SENHA { get; set; }
                 public string SETOR { get; set; }
                 public string NIVEL { get; set; }
        }
    }


    Luiz Carlos

    segunda-feira, 23 de abril de 2012 13:01
  • Você acredita ou tem certeza? hehe.

    Nos mostre o StackTrace da exceção.

    O erro é exatamente nessa linha?

    sLinha2 = "EVE96" +
                                /*NUMERO SEQUENCIAL*/ DateTime.Now.ToString("hhmmssMMyyyy") +
                                tabela.NUMCPF.ToString().PadRight(18, ' ').Substring(0, 17) +
                                tabela.NOMUSUARIO.ToString().PadRight(29, ' ').Substring(0, 28);
                                sw.Write(sLinha2);


    Take a look at WPF FlashMessage

    segunda-feira, 23 de abril de 2012 13:04
  • Joba,

    Segue StackTrace -> at Controle_de_Portaria.GeraArquivo.GeraArquivoEntrada(Estrutura tabela) in C:\Users\carvacl-adm\Desktop\Controle de Portaria\Controle de Portaria\GeraArquivo.cs:line 89

    Bom linha 89 é -> sLinha2 = "EVE96" +


    Luiz Carlos

    segunda-feira, 23 de abril de 2012 13:34
  • Cara, segundo esse código:

    private void btentrada_Click(object sender, EventArgs e)
            {   
                Estrutura tabela = new Estrutura();
     
                GeraArquivo.GeraArquivoEntrada(tabela);
            }

    Como você está instanciando a Estrutura sem setar as propriedades dela, portanto, as propriedades do tipo String está NULAS sim.

     tabela.NOMUSUARIO.ToString().PadRight(29, ' ').Substring(0, 28)
    Vai dar erro no NOMUSUARIO.ToString() pois (segundo o código que postou) a propriedade NOMUSUARIO está nula.


    Take a look at WPF FlashMessage

    • Marcado como Resposta LC-Locker segunda-feira, 23 de abril de 2012 14:07
    segunda-feira, 23 de abril de 2012 13:44
  • Joba,

    Obrigado pela ajuda, foi isso mesmo, erro de principiante... essa linha eu coloquei campos que tinha esquecido de referenciar suas propriedades, valeu Funcionou!!!


    Luiz Carlos

    segunda-feira, 23 de abril de 2012 14:06