Usuário com melhor resposta
Preciso de ajuda!!! -> Object reference not set to an instance of an object. C#

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
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
Todas as Respostas
-
-
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
-
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
-
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
-
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
-
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
-
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
-