MELHOR FORMA DE GRAVAR OS DADOS DENTRO DA CLASSE

 Tópico anterior Próximo tópico Novo tópico

MELHOR FORMA DE GRAVAR OS DADOS DENTRO DA CLASSE

C#

 Compartilhe  Compartilhe  Compartilhe
#498982 - 07/01/2022 23:16:03

ALVAROVB2009
GUARULHOS
Cadast. em:Maio/2009


Pessoal boa noite, estou começando a pouco tempo com o C# e migrei do VB6 , sei que tenho alguns vícios ainda em relação a algumas coisas, más fiz diversos cursos e peguei bastante o conceito do C# e quero poder explorar o máximo dele.
Montei uma classe e dentro dela tenho campos do tipo datetime, estive lendo algumas coisas e vi que o datetime não aceita null, então montei um esquema para verificar se o que esta chegando é uma data válida ou não, pois quero salvar o banco de dados Null , caso não tenha uma data e não 01-01-0001

Segue um trecho da minha classe

public class Funcionario
{
  public int CodEmpresa { get; set; }
  public string Nome { get; set; }
  public DateTime DataAdmissao { get; set; }

  public Funcionario(int codEmpresa, string nome, DateTime dataAdmissao)
  {
      CodEmpresa = codEmpresa;
      Nome = nome;
      DataAdmissao = dataAdmissao;
  }

   public static int Gravar(Funcionario Func, bool Inclusao, int CodRegistro = 0)
  {
     Sql = 'insert into funcionario (CodEmpresa,Nome,DataAdmissao) values (
     Sql += Func.CodEmpresa + ','' + Func.Nome + '','
      if (Func.DataAdmissao.ToString('yyyy-MM-dd') == '0001-01-01')
      {
         Sql += 'Null')'
       }
       else
       {
          Sql += ''' + Func.DataAdmissao.ToString('yyyy-MM-dd') + '')'
       }
  }
}

Pergunta, da forma que estou fazendo é a melhor forma , utilizando sql ao invés de parametros ?
No caso de usar parametros ao invés do Sql , eu teria que fazer essa mesma averiguação na dataadmissao ?
O que eu tenho visto a grande maioria das aulas que vi, apenas 2 usaram parametros, e mesmo assim para poder ensinar como usar, pois os comandos de gravação estavam sendo enviados por sql


Desde já agradeço a opinião de todos

Teoria quando se sabe tudo, e nada funciona. Prtica e quando tudo funciona e ningum sabe porque.
[]Aquele que quer aprender gosta que lhe digam quando esta errado;
s o tolo no gosta de ser corrigido -[]Prov.12:1


Resposta escolhida #498983 - 08/01/2022 00:49:28

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Basta você especificar o DateTime como nullable, usando o ?

public class Funcionario
{
  public int CodEmpresa { get; set; }
  public string Nome { get; set; }
  public DateTime? DataAdmissao { get; set; }



_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#498984 - 08/01/2022 00:50:43

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Quanto à gravação, com certeza tem maneira muito melhor de fazer, uma delas é usar um ORM já pronto como o Entity Framework ou Dapper.

_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#498985 - 08/01/2022 00:54:28

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Mas eu já fico muito contente de ver que está evoluindo! Isso é excelente!

_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#498986 - 08/01/2022 00:56:50

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Outra coisa que reparei, é que você tem um construtor de classe que simplesmente atribui valores à propriedades públicas. Isso é redundante. Só deveria usar isso, caso as propriedades fossem somente leitura ou privadas. Se essas propriedades podem ser manipuladas em uma instância da classe em outro ponto, não há necessidade de um construtor.

_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#498991 - 08/01/2022 14:04:30

ALVAROVB2009
GUARULHOS
Cadast. em:Maio/2009


Citação:
:
Quanto à gravação, com certeza tem maneira muito melhor de fazer, uma delas é usar um ORM já pronto como o Entity Framework ou Dapper.


Vlw a dica, nas aulas e nos cursos que fiz, teve um que falou do Entity, más na realidade avabei nem lembrando disso para poder iniciar de uma forma melhor, más ja peguei algumas coisas aqui e vou começar a dar uma olhada para ver uma implementação

Citação:
:
Outra coisa que reparei, é que você tem um construtor de classe que simplesmente atribui valores à propriedades públicas. Isso é redundante. Só deveria usar isso, caso as propriedades fossem somente leitura ou privadas. Se essas propriedades podem ser manipuladas em uma instância da classe em outro ponto, não há necessidade de um construtor.


Vlw a dica do construtor e não irei esquecer , e depois do que eu li o que vc escreveu, lembrei que um professor chegou a falar isso, más na realidade eu esqueci, pois todas as aulas sempre na criação das classes ja colocavam um construtor, tanto que ja tirei o construtor da minha aplicação


Citação:
:
Basta você especificar o DateTime como nullable, usando o ?

public class Funcionario
{
  public int CodEmpresa { get; set; }
  public string Nome { get; set; }
  public DateTime? DataAdmissao { get; set; }


Opa vlw, irei atrás para ver o erro que deu, pois quando coloquei o ? , apareceu um erro na montagem do meu sql na linha Func.DataAdmissao.ToString('yyyy-MM-dd') , pois aqui estou colocando a forma correta para incluir a data no Mysql, é que esse campo é obritário, já os outros campos estou vendo se possui algum valor ou não
A mensagem de erro - Nenhuma sobrecarga para o método 'ToString' leva 1 argumento

Nem preciso falar que a gravação de Null é diferente quando se tem dados.

O que eu faço é montar o Sql e mandar para a classe que faz a conexão com o banco de dados, pois lá eu coloquei toda movimentação que envolve o banco
CodGerado = BancoDados.Gravar(Sql, 'Funcionario')


Citação:
:
Mas eu já fico muito contente de ver que está evoluindo! Isso é excelente!

Vlw, antes tarde do que nunca rsrsrs, más sei que eu precisava me atualizar, comecei pelo Vb.Net, más sempre olhando aqui, vi que o C# é o melhor para começar a desenvolver e que se alguém quiser começar certo, que fosse por ele, então comecei a me aprofundar no C#


Teoria quando se sabe tudo, e nada funciona. Prtica e quando tudo funciona e ningum sabe porque.
[]Aquele que quer aprender gosta que lhe digam quando esta errado;
s o tolo no gosta de ser corrigido -[]Prov.12:1


#498992 - 08/01/2022 15:19:25

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Se vai usar MySQL, sugiro o Dapper ao invés do EF. Ele é ridiculamente fácil de usar e vai eliminar por completo essa sua etapa de formar queries pra gravar.

_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#498993 - 08/01/2022 15:54:27

ALVAROVB2009
GUARULHOS
Cadast. em:Maio/2009


Show vlw pelas dicas, realmente eu só estou usando o Mysql como banco de dados, irei atrás do Dapper e ver como funciona

Teoria quando se sabe tudo, e nada funciona. Prtica e quando tudo funciona e ningum sabe porque.
[]Aquele que quer aprender gosta que lhe digam quando esta errado;
s o tolo no gosta de ser corrigido -[]Prov.12:1


 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por ALVAROVB2009 em 08/01/2022 22:17:40