Usuário com melhor resposta
Erro no formato da data no retorno de uma consulta no Access

Pergunta
-
Boa Tarde,
Estou com um problema muito estranho:
Possuo um banco Access com campo Data/Hora e ao fazer uma consulta:
OleDbCommand da = new OleDbCommand("select MIN(E3TimeStamp) from Hist_KWh WHERE E3TimeStamp > #" + dataInicial + " 00:00:00# and E3TimeStamp < #" + dataInicial + " 23:59:59#", con);
A cosnulta funciona perfeitamente, mas se consulto #01/02/2015 xx/xx/xxxx# ele me retorna 02/01/2015. e essa inversão só acontece até 12/01/2015. Após 13/01/2015 tudo funciona normal. O mesmo ocorre para todos os meses.
A função comleta é essa abaixo:
public DateTime verifDataInicial(string dataInicial) { OleDbCommand da = new OleDbCommand("select MIN(E3TimeStamp) from Hist_KWh WHERE E3TimeStamp > #" + dataInicial + " 00:00:00# and E3TimeStamp < #" + dataInicial + " 23:59:59#", con); con.Open(); DateTime MaiorE3; string teste; try { teste = ((DateTime)da.ExecuteScalar()).ToString("MM/dd/yyyy"); return Convert.ToDateTime(teste); } catch { string data_vazia = "03/01/1968"; //MaiorE3 = Convert.ToDateTime(data_vazia); return Convert.ToDateTime(data_vazia); } finally { con.Close(); } }
Alguem poderia desvenadr esse mistério?
Obrigado
Respostas
-
Por que não pega o retorno com OleDbDataReader?
A vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel
- Sugerido como Resposta Matheus L. M. C. Campos quinta-feira, 2 de abril de 2015 02:56
- Marcado como Resposta Eduardo.RomeroModerator sexta-feira, 3 de abril de 2015 10:27
Todas as Respostas
-
Beto, boa noite!
Não entendi sua divida, em um determinado tempo sua consulta não funciona correto? este período esta retornando um timestamp null?
Att,
André Rodrigues Côrte
Analista de Sistema
Côrte Solutions
Grupo de Estudo C# Facebook
Canal de Estudo Youtube -
Realmente acho que está meio mal explicado. Vamos lá:
Possuo um BD Access que tem uma tabela que possui uma coluna tipo Data/Hora no formato dd/MM/yyyy HH:mm.ss. Quando executo uma consulta com o código abaixo, acontece algumas situações estranhas. Repare que o método retorna um DateTime e como o que vale é a string SQL, uso a entrada do método em string mesmo, ok?
public DateTime verifDataFinal(string dataInicial) { OleDbCommand da = new OleDbCommand("select MAX(E3TimeStamp) from Hist_KWh WHERE E3TimeStamp < #" + dataInicial + " 23:59:59# AND E3TimeStamp > #" + dataInicial + " 00:00:00#", con); con.Open(); DateTime MaiorE3; try { MaiorE3 = (DateTime)da.ExecuteScalar(); return MaiorE3; } catch { string data_vazia = "03/01/1968"; MaiorE3 = Convert.ToDateTime(data_vazia); return MaiorE3; } finally { con.Close(); } }
Acontece os seguintes "fenômenos"(rsrsr):
- Se eu entrar com 01/01/2015, ele retorna normal;
- Se eu entrar com 02/01/2015, ele retorna 01/02/2015:
- Se eu entrar com datas entre 03/01/2015 e 12/01/2015 ele retorna null apesar de existir resultado no banco para retorno.
O mesmo tipo de problemas acontece para meses 02 e 03.
Me salvaê! rsrs
Obrigado
-
-
Então Marcos, aconteceu o seguinte,
Olhando com mais calma e verificando os registros retornados, mesmo com sua sugestão as consultas estão sendo feitas de fato nos registros existentes porém fazendo a consulta com a data ainda invertida entre dd e MM.
E, as configurações locais, dá máquina e tb do Access estão dd/MM/yyyy.
Alguma ideia?
Obrigado
- Editado BetoPestana segunda-feira, 30 de março de 2015 01:28
-
-
-
Beto,
Certifique que o retorno não esta retornando nenhuma data null, pois isso pode ocorrer erro!
Att,
André Rodrigues Côrte
Analista de Sistema
Côrte Solutions
Grupo de Estudo C# Facebook
Canal de Estudo Youtube -
Então,
Marcos - Fiz a sua sugestão justamente no ato do SELECT. e a consulta com #02/01/2015#, retorna o registro que possui o filtro 01/02/2015.
André - Só retorna null quando filtro #02/01/2015# e não existe egistro em 01/02/2015.
Estou pirando!
Help me
Thanks
-
Por que não pega o retorno com OleDbDataReader?
A vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel
- Sugerido como Resposta Matheus L. M. C. Campos quinta-feira, 2 de abril de 2015 02:56
- Marcado como Resposta Eduardo.RomeroModerator sexta-feira, 3 de abril de 2015 10:27
-
-
Boa noite Beto,
Alguma atualização para nos dar ?
Referente ao que o GMSOFT falou não seria a solução ?
ou trabalhar direto com uma mascara reversa de data ?
Abraços
Matheus Leopardi Mello Canelada Campos
Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita
TechNet Community Support
Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.
-
Bom dia Beto,
Conseguiu resolver seu problema? Se sim, nos envie detalhes do que fez para resolver. Caso ainda esteja com problemas, desmarque a resposta e responda aos questionamentos feitos com mais detalhes para que possamos continuar ajudando.
Obrigado,
Abraço!
Eduardo Romero
Esse conteudo e fornecido sem garantias de qualquer tipo, seja expressa ou implicita.
MSDN Community Support
Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais facil para os outros visitantes encontrarem a resolucao mais tarde.