Array
(
)

Consulta por Datas

Alan Miranda
   - 23 dez 2011

Boa noite Pessoal...
Estou com problema para fazer consulta por datas, fiz o seguinte metodo porém não está correto...
Data de Parametro do Tipo Datetime: 07/10/2011 - Inicio e Fim
Camada DAL:
#Código
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:
#Código
Camada BLL
public SqlDataReader consultaVendas(DateTime Dataini, DateTime Datafim)
{
return ObjDAL.consultaVendas(Dataini, Datafim);
}

Camada UI:
#Código
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

Inovação Ltda
   - 23 dez 2011

bom dia tente dessa forma.

(SELECT * FROM Vendas WHERE DATA between CONVERT(Varchar(10), @Dataini, 103) AND CONVERT(Varchar(10), @Datafim, 103));

T++

Alan Miranda
   - 23 dez 2011

Tentei assim também o erro que aparece é Erro: SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM. O parametro de data deve ser passado como string ou Datetime ?

Att

Inovação Ltda
   - 23 dez 2011

Como esta no banco ? Se for datetime, simplesmente use o convert(data,103) ok ?

T++

Inovação Ltda
   - 23 dez 2011

Verifique quais datas estão chegando na sql e troque o where por isso.

CONVERT(CHAR(10),Data,103) .

T++

Flavix
|
MVP
Pontos: 25
    27 dez 2011

Você está passando as datas vazias. Olhe o método SqldataReader da sua 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);

Troque as duas ultimas linhas a cima por:
cmd.Parameters.AddWithValue(@Dataini, Dataini);
cmd.Parameters.AddWithValue(@Datafim, Datafim);

Você também não precisa instanciar a sua classe venda, então no inicio do metodo SqlDataReader, você pode excluir a linha:
VendasInformation venda = new VendasInformation();

Flavix
|
MVP
Pontos: 25
    27 dez 2011

Acho que assim da para entender melhor...

Você está passando as datas vazias. Olhe o método SqldataReader da sua camada DAL

Citação:

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);


Troque as duas ultimas linhas a cima por:
cmd.Parameters.AddWithValue(@Dataini, Dataini);
cmd.Parameters.AddWithValue(@Datafim, Datafim);

Você também não precisa instanciar a sua classe venda, então no inicio do metodo SqlDataReader, você pode excluir a linha:
VendasInformation venda = new VendasInformation();

Alan Miranda
   - 27 dez 2011

Então alterei a Camada DAL e agora está trazendo as informações tudo com zero...Creio que seja a Query que passo para o Banco de Dados:

#Código
public SqlDataReader consultaVendas(DateTime Dataini, DateTime Datafim)
{
SqlConnection cn = new SqlConnection();

VendasInformation venda = new VendasInformation();

venda.Data = Dataini;
venda.Data = Datafim;

try
{
cn.ConnectionString = Dados.StringDeConexao;

SqlCommand cmd = new SqlCommand();
cmd.Connection = cn;

cmd.CommandType = CommandType.Text;

cmd.CommandText = (SELECT * FROM Vendas WHERE DATA between CONVERT(Varchar(10), @Dataini, 103) AND CONVERT(Varchar(10), @Datafim, 103));
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();
}
}


Tenho somente três informações no banco SQL:

2011-11-07 19:54:09.657
2011-11-10 22:30:23.493
2011-11-10 22:32:26.430

Estou passado o parametro de Data assim DD/MM/YYYY - 07/11/2011 - Dataini e Datafim

Me ajudem por favor pessoal.

Vlw pela ajuda#Código#Código#Código#Código#Código#Código#Código#Código

Alan Miranda
   - 05 jan 2012

Alguém ?