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
#499026 - 11/01/2022 12:47:40

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


Membro da equipe
Teus prints nenhum da pra ver... use imgur...
E o seu problema é nada mais que formato. Se os dados estão corretos(confira com as propriedades Day, Month e Year se os valores estão corretos). Tente não pensar no formato como os dados em si.

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


#499027 - 11/01/2022 14:05:29

ALVAROVB2009
GUARULHOS
Cadast. em:Maio/2009


Consegui resolver, obrigado Kerplunk pela ajuda, foquei no que vc me falou agora por último para ver e os dados estavam corretos apenas a exibição na tela estava errada e ai fui para a analise com outro olhar no QuickWatch e o comando
Convert.ToDateTime(registro['DataAdmissao'].ToString()).ToString('dd/MM/yyyy')

Passou para
Convert.ToDateTime(registro['DataAdmissao']).ToString('dd/MM/yyyy')

Dessa forma ele carregou os dados corretamente no meu formulário e isso realmente é um erro de iniciante rsrsrs, pois quando coloquei a primeira vez o .ToString() eu ja tentei colocar a formatação dentro dele  ( registro['DataAdmissao'].ToString('dd/MM/yyyy') )  e ai deu erro pois eu não tinha ainda colocado o convert
Quando coloquei o convert não tirei o ToString do campo, e ai o comando não estava conseguindo converter o campo pois ele ja era um texto

Falta de costume com a nova linguagem, muita coisa ainda preciso aprender, más essa ja foi uma grande lição, perdi muito tempo para poder achar isso e bastava eu ter um outro olhar, se eu tivesse visto que os dados estavam corretos eu ja teria descoberto esse problema antes

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


#499028 - 11/01/2022 14:15:34

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


Membro da equipe
Tente usar dados em string o mínimo possível. Uma data por exemplo, não é uma string. Se for colocar num campo, use máscara e formato no campo. Se for colocar num grid, formate a coluna para o formato de data que quer. Trate os dados como eles são e só trabalhe como string com dados que são string. A tipagem é MUITO importante e deve ser seguida o máximo possível da forma como ela é.

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


#499040 - 12/01/2022 12:31:08

ALVAROVB2009
GUARULHOS
Cadast. em:Maio/2009


Citação:
:
Tente usar dados em string o mínimo possível. Uma data por exemplo, não é uma string. Se for colocar num campo, use máscara e formato no campo. Se for colocar num grid, formate a coluna para o formato de data que quer. Trate os dados como eles são e só trabalhe como string com dados que são string. A tipagem é MUITO importante e deve ser seguida o máximo possível da forma como ela é.


Isso estou fazendo, todos os campos data , cep , cpf e cnpj estão utilizando a máscara , ainda estou me ajustando com o C# porque agora como estou em um projeto real, estou saindo do básico, más sei que a tipagem é muito importante e tem que ser respeitada e que preciso colocar urgente um ORM rápido (DAPPER) , porque descobri que o datareader por exemplo não da para usar o nome do campo e sim apenas o index do campo dentro do sql, e para uma tabela com 97 campos fica inviável, pois por exemplo se por acaso tiver uma manutenção no nome do campo é uma demora para achar o campo correto

Agradeço por toda a ajuda que me deu

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


#499042 - 12/01/2022 13:01:33

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


Membro da equipe
DataReader também tem um método que retorna o índice do campo pelo seu nome e eles podem ser usado em conjunto:

string bla = dr.GetString(dr.GetOrdinal('nome do campo'));


Você pode até mesmo fazer um método de extensão:

public class DataReaderExtensions
{
    public static T Get<T>(this IDataReader rd, string column)
    {
        return rd.Get(column, default(T));
    }

    public static T Get<T>(this IDataReader rd, string column, T defaultValue)
    {
        try
        {
            int ordinal = rd.GetOrdinal(column);

            object value = rd[ordinal];

            if (rd.IsDBNull(ordinal))
            {
                value = defaultValue;
            }

            return (T)Convert.ChangeType(value, typeof(T));
        
        }
        catch (Exception e)
        {
            throw new DataReaderParseFieldException($'Erro na conversão de valores do atributo: [{column}] para tipo [{typeof(T)}]', e);
        }
    }
    public static IEnumerable<IDataRecord> AsEnumerable(this IDataReader reader)
    {
    while (reader.Read())
    {
        yield return reader;
    }
    }
}


E para usar fica:

int id = reader.Get('Id', 10);
string nome = reader.Get('Nome', '...');
DateTime nascimento = reader.Get('Nascimento', DateTime.Now);
float valor = reader.Get('Valor', 0.05f);
decimal valorDecimal = reader.Get('Valor', new Decimal(15.75));


Adicionei também um método para transformar o DataReader em um enumerável e pode usar assim:

using (var connection = new SqlConnection('some connection string'))
    using (var command = new SqlCommand('select * from products', connection))
    {
        connection.Open();

        using (var reader = command.ExecuteReader())
        {
            var results = reader.AsEnumerable()
            Select(record => new Product // aqui vai o seu tipo, nesse exemplo é 'Product'
            {
                Name = (string)record['product_name'], // aqui os campos, se quiser pode usar o método acima também
                Id = (int)record['product_id'],
                Category = (string)record['product_category']
            })
            .GroupBy(product => product.Category);
        }
    }
}


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


#499043 - 12/01/2022 13:22:51

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


Membro da equipe
Assim, não me entenda mal, eu admiro demais o progresso que está fazendo e sou todo à favor em ajudar nesse comecinho que é um caminho pedregoso, especialmente para quem vem de muito tempo trabalhando de modo não OOP.
Mas a primeira coisa que DEVE ser entendida são os conceitos básicos de OOP, eles são fundamentais para todo o resto. Entendendo eles bem, todo o resto vira brincadeira de criança, melzinho na chupeta.

O conceito que estou usando nos exemplos acima é o de métodos de extensão. Todo e qualquer objeto pode ser extendido, ou seja, pode adicionar coisas nele. Mesmo métodos já compilados e sem acesso ao código fonte, você pode ainda adicionar métodos nele, como é o caso do DataReader, ele está 'imbutido' nas DLL's do framework, mas mesmo assim ainda podem ser extendidos e foi exatamente o que fiz no exemplo. Além disso, observe que nos exemplos ao invés do objeto DataReader, estou usando a interface IDataReader. O que significa que qualquer objeto que herde dessa interface(o que inclui o DataReader, mas não somente ele), terão esses métodos disponíveis. Essas abstrações(métodos de extensão, interfaces...), podem ser usadas extensivamente e em combinação com qualquer outra habilidade da OOP.

Por exemplo, é possível construir algo de modo em que você possa fazer algo assim:

IEnumerable Produtos = MeuBanco.Produtos.GetProdutosByTipo(TiposProduto.Alimentos);

E isso te daria um enumerável contendo todos os produtos do tipo 'Alimentos', sem precisar escrever queries, lidar com conexão, datareader e toda essa parafernalha. E é exatamente isso um dos papéis de um ORM como o Dapper. E por isso que reforço tanto para que aprenda como usar o Dapper ao invés de ficar perdendo tempo com essas mazelas. Nele, tudo isso que você quer já está pronto, funcionando, testado, otimizado e estendível. Então para já produzir algo, você não precisa aprender essa parte mais 'chata', basta aprender bem a Orientação à Objetos, em que tudo é baseado. Então depois pode se interessar por aprender como é feito essa parte 'nas entranhas'.

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


 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