DATA SENDO CARREGADA NO DATATABLE ERRADA

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

DATA SENDO CARREGADA NO DATATABLE ERRADA

C#

 Compartilhe  Compartilhe  Compartilhe
#499009 - 10/01/2022 19:18:51

ALVAROVB2009
GUARULHOS
Cadast. em:Maio/2009


Última edição em 10/01/2022 19:51:05 por ALVAROVB2009

Pessoal boa noite, estou com um problema de novato no C# rsrsrs, estou com um banco Mysql e quando estou carregando o datatable ele ja esta carregando a data errada, e quando estou tentado levar para o formulário, ele só fica certo quando coloco MM/dd/yyyy .

Não sei se tem alguma configuração especial para abrir o banco, como o Allow Zero datetime = true que descobri para evitar um erro ao carregar um campo datetime no datatable

Minha conexão esta assim
Conexao = new MySqlConnection($'server ={servidor};user id={usuario};database={bd};password={senha}; Allow Zero Datetime = True');

para carregar o datatable tenho uma classe
        public static DataTable MostraDados(string Sql = '')
        {
            DataTable Dt = new DataTable();
            var Cmd = ConectaBanco().CreateCommand();
            Cmd.CommandText = Sql;
            Da = new MySqlDataAdapter(Cmd.CommandText, ConectaBanco());
            Da.Fill(Dt);
            return Dt;
        }

Esse print mostra que a data esta gravada corretamente no banco e as alterações que fiz para ajustar a data


Meu windows é Win 10 e esta em português e somente agora no C# que esta dando esse problema, pois eu uso o mesmo banco com o VB6 e não tenho esse problema


Obs: tentei anexar um png e não deu

Desde já agradeço a 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


#499013 - 10/01/2022 20:55:23

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


Membro da equipe
Já desistiu da OOP?

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


#499014 - 10/01/2022 22:38:39

ALVAROVB2009
GUARULHOS
Cadast. em:Maio/2009


Última edição em 10/01/2022 22:39:50 por ALVAROVB2009

Não desisti não, é como coloquei é um problema de novato, nesse caso o que estou fazendo de errado, pois eu carreguei os dados da consulta no datatable que fiz do funcionário e iria jogar direto para o formulário , depois no momento que eu fosse gravar ai estou jogando os dados para a classe funcionario e mandar gravar no banco depois

O campo dataadmissao deveria estar preenchido no datatable como 2022-01-07 já que estou trazendo os dados do mysql e ele esta vindo 01/07/2022

O que estou fazendo errado, estava pensando na sua pergunta, não fiz isso agora más mesmo que eu passasse os dados do datatable para o funcionario e depois passar para o form, iria dar diferença no que esta na data já que ela esta vindo errada?


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


#499015 - 11/01/2022 01:33:15

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


Membro da equipe
Bem, para ler dados, não use DataTable, use DataReader, é mais simples e muito mais rápido:

List<SeuObjeto> retorno = null;
using (MySqlConnection cn = new MySqlConnection('sua string de conexão'))
{
    cn.Open();
    using (MySqlCommand cmd = new MySqlCommand('sua SQL aqui', cn))
    {
        using (MySqlDataReader dr = cmd.ExecuteReader())
        {
            if (dr.HasRows)
                retorno = new List<SeuObjeto>();
            while (dr.Read())
            {
                SeuObjeto bla = new SeuObjeto();
                bla.PropriedadeString = dr.GetString(dr.GetOrdinal('campoString'));
                bla.PropriedadeInt32 = dr.GetInt32(dr.GetOrdinal('campoInt'));                
                bla.PropriedadeDateTime = dr.GetDateTime(dr.GetOrdinal('campoInt'));                
                retorno.Add(bla);
            }
        }
    }
}
return retorno;


Caso tenha que tratar dados null, faça um ternário, ou um método de extensão que trate null para cada tipo de dados.

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


#499016 - 11/01/2022 01:34:11

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


Membro da equipe
Mas novamente, use um ORM pronto. Dapper e Entity Framework já fazem tudo isso.

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


#499019 - 11/01/2022 10:11:09

ALVAROVB2009
GUARULHOS
Cadast. em:Maio/2009


Kerplunk agradeço e retorno e ajuda

Quanto ao ORM, estou vendo para instalar e usar o Dapper, pois estava lendo que ele é melhor que o EF para determinadas coisas e projetos que não são tão grandes
Estou usando como fonte de pesquisa o   Macoratti

Quanto ao datareader , realmente me esqueci completamente dele, pois eu não via tanta diferença e quando perguntei ao professor de uma das aulas a diferença entre os 2 e qual a melhor função, ele deixou uma resposta meio que vaga, más resumindo tudo o que ele falou 'qualquer um dos 2 são bons más o datatable é mais robusto', e com isso acabei adotando o datatable pois todas as aulas que assisti sempre estão usando o DT como retorno de consulta, más em nenhum dos casos vi problema com o datetime e nem tão pouco algum alerta para isso.

Irei colocar o datareader e ver senão terei problema com o retorno da data , más que isso para mim ainda pode ter alguma configuração errada que eu estava fazendo isso deve ter , pois nas aulas também a string de conexão sempre foi simples e descobri que tinha que colocar o Allow Zero Datetime = True para evitar o problema - unable to convert mysql date/time value to system.datetime



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


#499020 - 11/01/2022 10:25:23

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


Membro da equipe
O DataTable é um objeto utilizado para outras funções que não necessariamente só leitura de dados. Ele representa a tabela completa com todos os atributos, como tipo de dados para cada coluna, tamanho, chaves primárias e estrangeiras, triggers e muitas outras coisas. Portanto é um objeto mais pesado, que usa mais memória e consequentemente é mais lento.

O objeto DataReader, como o próprio nome diz é somente para leitura de dados, ele é bem mais leve por não ter praticamente nada à não ser os dados.

A coisa não é bem 'robusto ou não robusto', é usar a ferramenta certa para a função desejada. Tipo, você pode usar um malho para pregar um prego? Sim, mas um martelo simples é bem mais apropriado.

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


#499021 - 11/01/2022 12:04:47

ALVAROVB2009
GUARULHOS
Cadast. em:Maio/2009


Meu campo datatime continua trazendo a informação errada   , ainda bem que não montei o script para carregar todos os campos, pois são 97 campos

Realmente é alguma configuração mesmo , imaginei que isso poderia acontecer, mesmo o datatable sendo uma ferrari e eu estou usando apenas a marcha lenta, os dados do datetime teriam que estar corretos

O print mostra como que carreguei o reader e ai fui nas propriedades dele para ver os dados

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


#499023 - 11/01/2022 12:12:39

ALVAROVB2009
GUARULHOS
Cadast. em:Maio/2009


Só uma observação , meu campo no Mysql esta como DATE , pois não pretendo colocar a hora nele, e no C# esta definido como datetime pois não tem apenas DATE, será que isso pode estar interferindo ?

Particularmente acho que não, me corriga se eu estiver errado, mesmo porque estou transportando para o campo no banco apenas a data digitada pelo usuário, como pode ver no primeiro print a data salva corretamente

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


#499024 - 11/01/2022 12:13:16

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


Membro da equipe
Use o tipo de dados certo nas propriedades e não vai ter problemas. O formato é irrelevante na grande maioria dos casos.

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


#499025 - 11/01/2022 12:38:50

ALVAROVB2009
GUARULHOS
Cadast. em:Maio/2009


Realmente não sei o que esta acontecendo, coloquei no banco de dados o tipo datetime e quando trouxe a informação continuou errado 01/07/2022 00:00:00 e no meu banco a informação gravada ficou 2022-01-07 00:00:00

Segue print do trecho dos comandos Datareader e Datatable

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


Para responder este tópico o login é requerido
Se você já possui uma conta de usuário por favor faça seu login
Se você não possui uma conta de usuário use a opção Criar usuário