Buscando informacoes por periodo de Data
28/11/2011
0
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
Posts
29/11/2011
Joel Rodrigues
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.
29/11/2011
Joel Rodrigues
29/11/2011
Alan Miranda
29/11/2011
Joel Rodrigues
Existem formas de converter a data para um formato desejado em uma consulta, pesquise sobre isso.
29/11/2011
Alan Miranda
Vlw pela Força!
01/12/2011
Flavia Santos
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.
20/12/2011
Alan Miranda
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
23/12/2011
Alan Miranda
Os parâmetros que estou enviando são do tipo Datetime no seguinte formato DD/MM/YYYY.
27/12/2011
Flavia Santos
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.
Clique aqui para fazer login e interagir na Comunidade :)