Buscando informacoes por periodo de Data
Boa Tarde Pessoal
Então eu tenho um sistema que armazena vendas....
Agora quero efetuar uma consulta por data,irá colocar o usuário que ele quer procurar a dataincio e datafim, e irá trazer todas as informações que estão no banco.
Porem a data quem vem do banco de dados tem o seguinte formato 2011-11-07 19:54:09.657.
Mas quero consultar somente o DD/MM/YYYY, porem nao sei como fazer pelo C# e nem consultar direto do banco SQL
Me ajuda ai pessoal
Vlww
Então eu tenho um sistema que armazena vendas....
Agora quero efetuar uma consulta por data,irá colocar o usuário que ele quer procurar a dataincio e datafim, e irá trazer todas as informações que estão no banco.
Porem a data quem vem do banco de dados tem o seguinte formato 2011-11-07 19:54:09.657.
Mas quero consultar somente o DD/MM/YYYY, porem nao sei como fazer pelo C# e nem consultar direto do banco SQL
Me ajuda ai pessoal
Vlww
Alan Miranda
Curtidas 0
Respostas
Joel Rodrigues
28/11/2011
Amigo,
se você usa SQL Server e o tipo de dados DateTime, pode fazer a consulta utilizando um objeto DateTime do .NET. Um exemplo rápido:
Esse código dá pra você ter uma visão geral de como funciona o tratamento de DateTimes entre seu programa e o bd (independente do formato).
Se tiver algum erro, leve a mal não, fiz no notepad e não conferi.
Boa sorte.
se você usa SQL Server e o tipo de dados DateTime, pode fazer a consulta utilizando um objeto DateTime do .NET. Um exemplo rápido:
public DataTable BuscarVendas(DateTime dataInicio, DateTime dataFim) { SqlConnection minhaConexao = new SqlConnection(stringConexao); SqlCommand comando = minhaConexao.CreateCommand(); comando=commandText = SELECT * FROM VENDAS WHERE DATA BETWEEN @INICIO AND @FIM; comando.Parameters.AddWithValue(INICIO, dataInicio); comando.Parameters.AddWithValue(FIM, dataFim); SqlDataAdapter adap = new SqlDataAdapter(comando); DataTable tabResult = new DataTable(); adap.Fill(tabResult); return tabResult; }
Esse código dá pra você ter uma visão geral de como funciona o tratamento de DateTimes entre seu programa e o bd (independente do formato).
Se tiver algum erro, leve a mal não, fiz no notepad e não conferi.
Boa sorte.
GOSTEI 0
Joel Rodrigues
28/11/2011
Ah, onde for string, tem ASPAS DUPLAS (o sistema do fórum retira se colocar direto, questão de codificação).
GOSTEI 0
Alan Miranda
28/11/2011
Então mas se o usuário procurar com a Data do formato: DD/MM/YY - 10/15/1990, no banco de dados ele vai reconhecer ?, pois tento fazer isso diretamente no banco de dados e não da certo.
GOSTEI 0
Joel Rodrigues
28/11/2011
Bem, para escrever uma instrução SQL diretamente no gerenciador do BD, você deve usar o mesmo formato do banco. O que lhe passei foi para fazer uma consulta através de sua aplicação.
Existem formas de converter a data para um formato desejado em uma consulta, pesquise sobre isso.
Existem formas de converter a data para um formato desejado em uma consulta, pesquise sobre isso.
GOSTEI 0
Alan Miranda
28/11/2011
Correto, dessa forma que vc enviou,se a pessoa Digitar DD/MM/YY para a variavel DATAINI e para DATAFIM já busco correto ? Mesmo tendo hora e segundos no Bando de dados ?
Vlw pela Força!
Vlw pela Força!
GOSTEI 0
Flavia Santos
28/11/2011
Vamos supor que sua aplicação passe a data no formato 2011-11-01 11:00:00 e você deseja que a consulta utilize apenas data, ignorando a hora, você pode tratar a data diretamente no banco.
Na sua consulta você faria algo assim:
select * from tb_SuaTabela
where
(Convert(Datetime,Convert(Varchar,Campo_Data,103),103) >= Convert(Datetime,Convert(Varchar,@DATAINI,103),103) OR @DATAINI IS NULL)
AND
(Convert(Datetime,Convert(Varchar,Campo_Data,103),103) <= Convert(Datetime,Convert(Varchar,@DATAFIM ,103),103) OR @DATAFIM IS NULL)
Neste primeiro exemplo as variaveis de data podem vir com valor nulo da aplicação.
Você também poderia fazer uma consulta assim:
select * from tb_SuaTabela
where
(Convert(Datetime,Convert(Varchar,Campo_Data,103),103) BETWEEN Convert(Datetime,Convert(Varchar,@DATAINI,103),103) AND Convert(Datetime,Convert(Varchar,@DATAFIM ,103),103) OR @DATAFIM IS NULL)
Neste segundo exemplo é obrigatório um valor para as variaveis, elas não poderão ter valor nulo.
Obs: Este código Convert(Datetime,Convert(Varchar,Campo_Data,103),103) converte primeiro o campo Data_Campo em um varchar no formato DD/MM/YYYY, depois o converte novamente para o tipo DATETIME no mesmo formato (DD/MM/YYYY).
Espero ter ajudado.
Na sua consulta você faria algo assim:
select * from tb_SuaTabela
where
(Convert(Datetime,Convert(Varchar,Campo_Data,103),103) >= Convert(Datetime,Convert(Varchar,@DATAINI,103),103) OR @DATAINI IS NULL)
AND
(Convert(Datetime,Convert(Varchar,Campo_Data,103),103) <= Convert(Datetime,Convert(Varchar,@DATAFIM ,103),103) OR @DATAFIM IS NULL)
Neste primeiro exemplo as variaveis de data podem vir com valor nulo da aplicação.
Você também poderia fazer uma consulta assim:
select * from tb_SuaTabela
where
(Convert(Datetime,Convert(Varchar,Campo_Data,103),103) BETWEEN Convert(Datetime,Convert(Varchar,@DATAINI,103),103) AND Convert(Datetime,Convert(Varchar,@DATAFIM ,103),103) OR @DATAFIM IS NULL)
Neste segundo exemplo é obrigatório um valor para as variaveis, elas não poderão ter valor nulo.
Obs: Este código Convert(Datetime,Convert(Varchar,Campo_Data,103),103) converte primeiro o campo Data_Campo em um varchar no formato DD/MM/YYYY, depois o converte novamente para o tipo DATETIME no mesmo formato (DD/MM/YYYY).
Espero ter ajudado.
GOSTEI 0
Alan Miranda
28/11/2011
Boa noite pessoal, desculpa a demora mas ainda estou com problema, fiz da seguinte forma.
Camada DAL
Camada BLL
Camada UI
pessoal me ajuda por favor
Camada DAL
public SqlDataReader consultaVendas(DateTime Dataini, DateTime Datafim) { SqlConnection cn = new SqlConnection(); VendasInformation venda = new VendasInformation(); try { cn.ConnectionString = Dados.StringDeConexao; SqlCommand cmd = new SqlCommand(); cmd.Connection = cn; cmd.CommandType = CommandType.Text; cmd.CommandText = (SELECT * FROM Vendas WHERE DATA >= CONVERT(Varchar(10), @Dataini, 111) AND DATA <= CONVERT(Varchar(10), @Datafim, 111); cmd.Parameters.AddWithValue(@Dataini, venda.Data); cmd.Parameters.AddWithValue(@Datafim, venda.Data); cn.Open(); SqlDataReader Leitor; Leitor = cmd.ExecuteReader(); while (Leitor.Read()) { venda.Codigo = Convert.ToInt32(Leitor[CODIGO]); venda.Data = Convert.ToDateTime(Leitor[DATA]); venda.Quantidade = Convert.ToInt32(Leitor[QUANTIDADE]); venda.Faturado = Convert.ToBoolean(Leitor[FATURADO]); venda.Codigocliente = Convert.ToInt32(Leitor[CODIGOCLIENTE]); venda.Codigoproduto = Convert.ToInt32(Leitor[CODIGOPRODUTO]); } return Leitor; } catch (SqlException ERR) { throw new Exception(ERRO NA CONEXÃO + ERR.Message); } finally { cn.Close(); } } }
Camada BLL
public SqlDataReader consultaVendas(DateTime Dataini, DateTime Datafim) { return ObjDAL.consultaVendas(Dataini, Datafim); }
Camada UI
VendasInformation venda = new VendasInformation(); DateTime Dataini = DateTime.Parse(TxtDataini.Text, dd/MM/yyyy); DateTime Datafim = DateTime.Parse(TxtDatafim.Text, dd/MM/yyyy); VendasBLL dados = new VendasBLL(); dados.consultaVendas(Dataini, Datafim); TxtCodigo.Text = Convert.ToString(venda.Codigo); TxtQuantidade.Text = Convert.ToString(venda.Quantidade); TxtFaturado.Text = Convert.ToString(venda.Faturado); TxtCocCliente.Text = Convert.ToString(venda.Codigocliente); TxtCodProduto.Text = Convert.ToString(venda.Codigoproduto); TxtData.Text = Convert.ToString(venda.Data);
pessoal me ajuda por favor
GOSTEI 0
Alan Miranda
28/11/2011
Alguém ???
GOSTEI 0
Alan Miranda
28/11/2011
??????????
GOSTEI 0
Flavia Santos
28/11/2011
Qual é o erro que está apresentando?
GOSTEI 0
Alan Miranda
28/11/2011
Então Flavia o erro que aparece é: SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.
Os parâmetros que estou enviando são do tipo Datetime no seguinte formato DD/MM/YYYY.
Os parâmetros que estou enviando são do tipo Datetime no seguinte formato DD/MM/YYYY.
GOSTEI 0
Rodrigo Odasaki
28/11/2011
??????
GOSTEI 0
Alan Miranda
28/11/2011
O que não entendeu Rodrigo ????
Abraçoss
Abraçoss
GOSTEI 0
Flavia Santos
28/11/2011
Alan,
Esse erro ocorre porque um dos seus campos DateTime está vazio ou tem uma data fora do intervalo “1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM”.
Analisando o seu código temos:
Aqui você cria uma nova instância da Classe venda (ou seja, uma instância sem nenhum valor atribuído as propriedades)
VendasInformation venda = new VendasInformation();
Aqui você tenta resgatar da sua classe venda um valor para a propriedade Data, porém como anteriormente você instanciou está classe e não definiu nenhum valor ela, a mesma está vazia e ocasiona o erro.
cmd.Parameters.AddWithValue(@Dataini, venda.Data);
cmd.Parameters.AddWithValue(@Datafim, venda.Data);
O seu método SqlDataReader já recebe como parametro dois campos data, utilize eles no seu select.
Esse erro ocorre porque um dos seus campos DateTime está vazio ou tem uma data fora do intervalo “1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM”.
Analisando o seu código temos:
Aqui você cria uma nova instância da Classe venda (ou seja, uma instância sem nenhum valor atribuído as propriedades)
VendasInformation venda = new VendasInformation();
Aqui você tenta resgatar da sua classe venda um valor para a propriedade Data, porém como anteriormente você instanciou está classe e não definiu nenhum valor ela, a mesma está vazia e ocasiona o erro.
cmd.Parameters.AddWithValue(@Dataini, venda.Data);
cmd.Parameters.AddWithValue(@Datafim, venda.Data);
O seu método SqlDataReader já recebe como parametro dois campos data, utilize eles no seu select.
GOSTEI 0