DATA HORAS SQL 2012/09/10 00:00:00

ROGERIOAZEVEDO 19/09/2012 08:38:49
#409941
Bom dia.

Cá estou precisando novamente da ajuda de vocês. Estou desenvolvendo uma aplicação que fará um select em uma base de dados. No select na querry WHERE há um BETWEEN data inicial e data final. Eu substitui essas datas por um Datetimepicker. O problema é que eu preciso que na data inicial contenha 00:00:00 e na data final 23:59:59 se não, o resultado não será correto, como acrescento essa hora?

//Cria Parametros para substituir na Querry
cmd2.Parameters.Add([Ô]@data1[Ô], SqlDbType.Date);
cmd2.Parameters[[Ô]@data1[Ô]].Value = this.dtpIni.Value.Date; + [Ô]00:00:00[Ô]
cmd2.Parameters.Add([Ô]@data2[Ô], SqlDbType.Date);
cmd2.Parameters[[Ô]@data2[Ô]].Value = this.dtpFim.Value.Date; + [Ô]23:59:59[Ô]


JONATHANSTECKER 19/09/2012 09:36:45
#409948
Resposta escolhida
Assim deve funcionar...
String.Format([Ô]{0:yyyy/MM/dd} {1}[Ô], this.dtpIni.Value, [Ô]00:00:00[Ô])
String.Format([Ô]{0:yyyy/MM/dd} {1}[Ô], this.dtpFim.Value, [Ô]23:59:59[Ô])
ROGERIOAZEVEDO 19/09/2012 13:41:39
#409987
Oi Jonathan,

Muito obrigado pela ajuda. Não sei por qual motivo não funcionou. Não apresentou nenhum erro, mas não retornou a informação correta. Eu fiz o seguinte:

Substitui ISTO:

cmd2.Parameters[[Ô]@data1[Ô]].Value = this.dtpIni.Value.Date;
cmd2.Parameters[[Ô]@data2[Ô]].Value = this.dtpFim.Value.Date;

Por ISTO:

cmd2.Parameters[[Ô]@data1[Ô]].Value = String.Format([Ô]{0:yyyy/MM/dd} {1}[Ô], this.dtpIni.Value, [Ô]00:00:00[Ô])
cmd2.Parameters[[Ô]@data2[Ô]].Value = String.Format([Ô]{0:yyyy/MM/dd} {1}[Ô], this.dtpFim.Value, [Ô]23:59:59[Ô])


A estrutura da Querry é a seguinte:

WHERE dtFaturamento BETWEEN [ô]2012/08/01 00:00:00[ô] AND [ô]2012/08/31 23:59:59[ô]

Eu substituí as datas por variáveis ficando assim:

WHERE dtFaturamento BETWEEN @data1 AND @data2

Assim com os dois Datetimepicker eu colocaria a data inicial e a data final, os Pickers estão configurados como short. Ate aí funcionou legal, o problema é que o Picker coloca apenas a data, e no meu banco, se não colocar o horário do inicio e o horário final, não aparece as vendas do ultimo dia. Por exemplo, eu seleciono o período de 01/08/2012 até 31/08/2012 mas não aparece os lançamentos do dia 31, mas se eu rodar a querry com o horário, conforme citei acima, funciona perfeitamente.


JONATHANSTECKER 19/09/2012 14:11:32
#409993
Citação:

A estrutura da Querry é a seguinte:

WHERE dtFaturamento BETWEEN [ô]2012/08/01 00:00:00[ô] AND [ô]2012/08/31 23:59:59[ô]


Você colocou um Breakpoint para ver se o resultado está saindo como o da estrutura acima?
ALEVALE 19/09/2012 15:21:23
#410005
Bom dá para fazer um teste também para filtrar os dados do dia 17 por exemplo coloque como dia inicial 17 e final 18, já peguei uma vez um erro dessa forma.
ROGERIOAZEVEDO 19/09/2012 15:22:13
#410006
Opa, coloquei sim o breakpoint e aparentemente o objeto estava recebendo a informação que deveria receber, conforme envio print em anexo. No entanto coloquei o profile e percebi que não era isso que ocorria. A querry era executada sem o horário.

QUERRY PROFILE:
exec sp_executesql N[ô]SELECT CAST(SUM(CASE WHEN StDevolucao =1 THEN (vlcalculado * qtdproduto * -1) ELSE (vlcalculado * qtdproduto) End) AS MONEY) AS Vendas FROM GSN_PE_EMPRESA.dbo.PedidoItem WHERE dtFaturamento BETWEEN @data1 AND @data2 AND CdNatoperacao IN ([ô][ô]00[ô][ô],[ô][ô]01[ô][ô],[ô][ô]02[ô][ô],[ô][ô]03[ô][ô],[ô][ô]07[ô][ô],[ô][ô]08[ô][ô], [ô][ô]09[ô][ô],[ô][ô]12[ô][ô], [ô][ô]18[ô][ô],[ô][ô]40[ô][ô],[ô][ô]41[ô][ô],[ô][ô]44[ô][ô])[ô],N[ô]@data1 date,@data2 date[ô],@data1=[ô]2012-08-01[ô],@data2=[ô]2012-08-31[ô]

Novamente agradeço o apoio.
ROGERIOAZEVEDO 20/09/2012 08:56:32
#410055
Alguem tem alguma pista? Essa é a classe onde fica o SELECT.

 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WindowsFormsApplication1
{
//CLASSE PUBLICA DE VARIÁVEIS PARA UTILIZAR EM TODO SOFTWARE
public class Variaveis
{


//STRING PARA JUNÇÃO DAS VARIÁVEIS
public static string banco1 = qry + ba + PIT + clausula1;
public static string banco2 = qry + ba + PIT + clausula2;
public static string banco3 = qry + ba + PIT + clausula3;


//-/////////////////////// VARIAVEIS BA //////////////////////////////////////////////////////
public const string ba = [Ô]BA_EMPRESA.dbo.[Ô];


//-/////////////////////// VARIAVEIS CE //////////////////////////////////////////////////////
public const string ce = [Ô]CE_EMPRESA.dbo.[Ô];


//-/////////////////////// VARIAVEIS DF //////////////////////////////////////////////////////
public const string df = [Ô]DF_EMPRESA.dbo.[Ô];


//-/////////////////////// VARIAVEIS GO //////////////////////////////////////////////////////
public const string go = [Ô]GO_EMPRESA.dbo.[Ô];


//-/////////////////////// VARIAVEIS MG //////////////////////////////////////////////////////
public const string mg = [Ô]MG_EMPRESA.dbo.[Ô];


//-/////////////////////// VARIAVEIS MT //////////////////////////////////////////////////////
public const string mt = [Ô]MT_EMPRESA.dbo.[Ô];


//-/////////////////////// VARIAVEIS PE //////////////////////////////////////////////////////
public const string pe = [Ô]PE_EMPRESA.dbo.[Ô];


//-/////////////////////// VARIAVEIS RJ //////////////////////////////////////////////////////
public const string rj = [Ô]RJ_EMPRESA.dbo.[Ô];


//-/////////////////////// VARIAVEIS SP //////////////////////////////////////////////////////
public const string sp = [Ô]SP_EMPRESA.dbo.[Ô];



//####################################################################################
/////////////////////QUERRYS QUE SERÃO CHAMADAS PELAS VARIAVEIS///////////////////////
//####################################################################################


//QUERRY UNIDADES
public const string qry = [Ô]SELECT[Ô]
+ [Ô] CAST(SUM(vlcalculado * qtdproduto) AS MONEY) AS Vendas[Ô]
+ [Ô] FROM [Ô];



//####################################################################################
////////////////////////////////////TABELAS DOS BANCOS////////////////////////////////
//####################################################################################

public static string PIT = [Ô]PedidoItem[Ô];



//####################################################################################
/////////////////////////////////// WHERE DOS SELECTS ////////////////////////////////
//####################################################################################


public static string clausula1 = [Ô] WHERE dtFaturamento BETWEEN @data1 AND @data2[Ô]
+ [Ô] AND CdNatoperacao IN ([ô]00[ô],[ô]01[ô],[ô]02[ô],[ô]03[ô],[ô]07[ô],[ô]08[ô], [ô]09[ô],[ô]12[ô], [ô]18[ô])[Ô];

public static string clausula2 = [Ô] WHERE dtFaturamento BETWEEN @data1 AND @data2[Ô]
+ [Ô] AND CdNatoperacao = [ô]05[ô][Ô];

public static string clausula3 = [Ô] WHERE dtFaturamento BETWEEN @data1 AND @data2[Ô]
+ [Ô] AND CdNatoperacao IN ([ô]40[ô],[ô]41[ô],[ô]44[ô])[Ô];

}
}
OCELOT 20/09/2012 10:09:12
#410059
Você está usando parâmetros, não passe o valor como string, passe como DateTime mesmo, o 00:00:00 você não precisa colocar já que ele por padrão já vai considerar este horario, então faça algo do tipo

cmd2.Parameters[[Ô]@data1[Ô]].Value = this.dtpIni.Value;
cmd2.Parameters[[Ô]@data2[Ô]].Value = this.dtpFim.Value.Add(new TimeSpan(23,59,59));

Eu geralmente nem mesmo defino o tipo de dados na hora de adicionar o parâmetro, acho mais prático usar o AddWithValue onde ele vai pegar o tipo do parâmetro de acordo com o tipo de variável passada pra ele, então passando um DateTime ele já sabe que tem que tratar como data.
ROGERIOAZEVEDO 20/09/2012 11:10:35
#410069
Não funcionou, mas peguei a sua ideia e fiz o seguinte, seria isso?

  

cmd1.Parameters.AddWithValue([Ô]@data1[Ô], this.dtpIni.Value.Add(new TimeSpan(00, 00, 00)));
cmd1.Parameters.AddWithValue([Ô]@data2[Ô], this.dtpFim.Value.Add(new TimeSpan(23, 59, 59)));



Aparentemente assim funcionou!
OCELOT 20/09/2012 12:58:14
#410080
Agora que reparei uma coisa na sua screenshot, você percebeu que lá você definia o formato como SqlDbType.Date, então, este formato suporta apenas data sem horário, provavelmente se você mudasse lá para SqlDbType.DateTime funcionaria, mas o AddWithValue já acerta isso sozinho então é mais fácil usar ele.

São estes pequenos detalhes que se deixa passar que causam os erros mais chatos de se corrigir.
ROGERIOAZEVEDO 20/09/2012 14:17:49
#410085
Muito obrigado pelo apoio a todos. é uma pena que não possa escolher 2 soluções.

Agradecimento especial para JONATHANSTECKER e OCELOT pela paciencia.

Peguei a a oreintação que o Jonathan passou e troquei de Date para DateTime e funcionou perfeitamente também, como não vi isso hauahua, sou muito burro mesmo!
Tópico encerrado , respostas não são mais permitidas