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