none
Erro ao instanciar uma classe RRS feed

  • Pergunta

  • Bom dia Galera !

    Estou com dificuldade num algoritmo que estou implementando de cadastro onde tenho as seguinte estrutura:

    public void Inserir (Filial_Empresa_REL fili_rel)
            {
                var strQuery = "";
                strQuery += "INSERT INTO EMPRESA (EMPR_CODIGO,EMPR_NOME,EMPR_RAZAOSOCIAL,EMPR_CNPJ,EMPR_INSCRICAOESTADUAL,EMPR_ENDERECO,EMPR_TELEFONE,EMPR_SITE,EMPR_TIPO)";
                 strQuery += string.Format("VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}')",
                     fili_rel.empresa.EMPR_CODIGO,fili_rel.empresa.EMPR_NOME,fili_rel.empresa.EMPR_RAZAOSOCIAL,fili_rel.empresa.EMPR_CNPJ,
                     fili_rel.empresa.EMPR_INSCRICAOESTADUAL,fili_rel.empresa.EMPR_ENDERECO,fili_rel.empresa.EMPR_TELEFONE,fili_rel.empresa.EMPR_SITE,2);
    
                using (contexto = new Contexto())
                {
                    contexto.ExecutaComando(strQuery);
    
                }
    
                BuscaID(fili_rel);
    
                strQuery = "";
                strQuery += "INSERT INTO PROPRIETARIA_FILIAL(EMPR_ID,PROP_ID)";
                strQuery += string.Format("VALUES('{0}','{1}')",
                    fili_rel.filial.EMPR_ID, fili_rel.filial.PROP_ID);
            }
    
            public Filial_Empresa_REL BuscaID(Filial_Empresa_REL fili_rel)
            {
              
    
                using (contexto = new Contexto())
                {
    
                   
                    var strQuery = "";
                    strQuery += "SELECT EMPR_ID FROM EMPRESA WHERE EMPR_TIPO='2'";
                    strQuery += string.Format("AND EMPR_CODIGO = '{0}'", fili_rel.empresa.EMPR_CODIGO);
    
                    var strQuery2 = "";
                    strQuery2 += "SELECT PROP_ID FROM PROPRIETARIA";
                 
    
                    var   retornoEscalarIdEmp = Convert.ToInt32(contexto.ExecutaComandoScalar(strQuery));
                    var   retornoEscalarIdProp = Convert.ToInt32(contexto.ExecutaComandoScalar(strQuery2));
    
                    fili_rel.filial.EMPR_ID = retornoEscalarIdEmp;
                    fili_rel.filial.PROP_ID = retornoEscalarIdProp;
    
    
                    return fili_rel;
                  
                    
                }

    O erro que aparece é Object reference not set to an instance of an object, e aparece quando chega na parte em negrito, ao passar o valor da variavel que foi buscar no banco para a classe, sou novato nessa parte e não estou conseguindo identificar a causa do erro.

    Obrigado.



    • Editado Diego Bexa segunda-feira, 23 de junho de 2014 13:24
    segunda-feira, 23 de junho de 2014 13:22

Respostas

  • Então você pode usar direto essa classe Proprietaria_Filial, ao invés de usar a Filial_Empresa_REL:

    public class Proprietaria_Filial
    {
        public int IdEmpresa { get; set; }
        public Empresa empresa { get; set; }
        public int IdProprietaria { get; set; }
        public Proprietaria proprietaria { get; set; }
    }

    E aí você poderia também colocar no "Get" da empresa e proprietária, um código que pesquise os dados sobre a empresa e proprietária de acordo com os valores que estão nos campos de ID, como por exemplo:

    public Proprietaria proprietaria
    {
        get
        {
            return Proprietaria.Buscar(this.IdProprietaria);
        }
    }


    • Marcado como Resposta Diego Bexa segunda-feira, 23 de junho de 2014 14:31
    segunda-feira, 23 de junho de 2014 14:28

Todas as Respostas

  • Bom dia Diego,

    Talvez o erro aconteça porque o atributo "filial" do objeto "fili_rel" não esteja instanciado.

    Tente antes de setar essas propriedades, inserir esse código:

    fili_rel.filial = new Filial(); //coloque o nome da classe do atributo "filial"

    segunda-feira, 23 de junho de 2014 13:40
  • Ok, deu certo só que estou usando a seguinte estrutura e estou com algumas duvidas:

    Tenho uma classe para acessar as outras classes que são relacionadas. EX:

    public class Filial_Empresa_REL
        {
    
            public Proprietaria_Filial filial { get; set; }
            public Empresa empresa { get; set; }
            public Proprietaria proprietaria { get; set; }
        }

    Essa classe tem acesso a classe empresa, proprietaria e filial.

    Essa estrutura para se trabalhar com classes relacionais é a melhor forma, ou há outras formas mais adequadas ?

    Obrigado

    segunda-feira, 23 de junho de 2014 13:52
  • Bom, aí depende muito da sua regra de negócio, que determina qual classe deve ser filha de uma outra, ou quais são os relacionamentos de herança entre elas.

    Para eu entender direito, a classe Proprietaria_Filial possui o código da Empresa e da Proprietária certo?

    Nesse caso, para que você precisa da classe Filial_Empresa_REL? A classe Proprietaria_Filial já seria sua classe relacional, não seria?

    segunda-feira, 23 de junho de 2014 13:59
  • Sim, realmente seria só que estou utilizando uma view tipada e preciso alimentar mais de uma tabela com os dados e para facilitar estava usando essa estrutura, há outra maneira ?


    • Editado Diego Bexa segunda-feira, 23 de junho de 2014 14:21
    segunda-feira, 23 de junho de 2014 14:21
  • Então você pode usar direto essa classe Proprietaria_Filial, ao invés de usar a Filial_Empresa_REL:

    public class Proprietaria_Filial
    {
        public int IdEmpresa { get; set; }
        public Empresa empresa { get; set; }
        public int IdProprietaria { get; set; }
        public Proprietaria proprietaria { get; set; }
    }

    E aí você poderia também colocar no "Get" da empresa e proprietária, um código que pesquise os dados sobre a empresa e proprietária de acordo com os valores que estão nos campos de ID, como por exemplo:

    public Proprietaria proprietaria
    {
        get
        {
            return Proprietaria.Buscar(this.IdProprietaria);
        }
    }


    • Marcado como Resposta Diego Bexa segunda-feira, 23 de junho de 2014 14:31
    segunda-feira, 23 de junho de 2014 14:28
  • Humm, entendi vou fazer dessa maneira.

    Obrigado pela ajuda !

    segunda-feira, 23 de junho de 2014 14:31
  • Beleza, qualquer coisa pergunte aí!
    segunda-feira, 23 de junho de 2014 14:34