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
   - 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
   - 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 ?