none
Erro com DateTime do SQL RRS feed

  • Pergunta

  • Meu select esta com erro comparando com 2 datas conforme codigo abaixo:

    string _strSQL02 ="SELECT * FROM PROGRAPREMONTTUB WHERE CC = '" + TextBoxCentrodeCusto.Text +"' AND ISOMETRICO = '" + DropDownListISOMETRICO.Text +"' AND ITEM = '" + DropDownListITEM.Text +"' AND DATAI = '" + TextBoxDATAI.Text +"' AND DATAF = '" + TextBoxDATAF.Text +"'";

    Obs: Os campos DATAI e DATAF são do tipo DateTime do banco de dados SQL.

    Se alguem puder postar o codigo certo  eu agradeço.

    Fico no aguardo.

    Obrigado.

    terça-feira, 28 de maio de 2013 11:21

Todas as Respostas

  • Sua textboxDataI.Text está com uma data valida ? 

    Seria SqlServer 2005 ou 2008 ? Não há problema passar como string desde que o Sql entenda como um campo de data válido.

    Especifique melhor seu erro

    ---Se for util marque como util.

    terça-feira, 28 de maio de 2013 11:28
  • Sim meu TextBoxDATAI.Text = "27/05/2013" e o meu TextBoxDATAF.Text = "31/05/2013"

    Que são datas certas pois eu faço tratamento das datas.

    O banco de dados é SQL Server 2008.

    Se puder me ajudar eu agradeço muito.

    Segue abaixo o erro:


    Server Error in '/' Application.



    The conversion of a varchar data type to a datetime data type resulted in
    an out-of-range value.

    Description:
    An unhandled exception occurred during the execution of the current web
    request. Please review the stack trace for more information about the error and
    where it originated in the code.

    Exception Details:
    System.Data.SqlClient.SqlException: The conversion of a varchar data type to
    a datetime data type resulted in an out-of-range value.

    Source
    Error:
    Line 169:                con02.Open();
    Line 170:                SqlDataReader dr02 = cmd02.ExecuteReader();
    Line 171:                if (dr02.Read())
    Line 172:                {
    Line 173:
    terça-feira, 28 de maio de 2013 11:32
  • Bom dia,

    converta o sqldata para varchar que resolve o problema.

    Abraço

    terça-feira, 28 de maio de 2013 11:59
  • Bruno

    Como eu faço essa conversão ?

    Fico no aguardo

    Obrigado

    terça-feira, 28 de maio de 2013 12:07
  • Convert(varchar(20),seucampobanco,21)

    Ficaria -- no seu and "AND Convert(varchar(20),DATAI,21) = '" + seutextbox + "' ......

    Se for util marque como util ou como resposta.

    terça-feira, 28 de maio de 2013 12:15
  • Daniel

    Coloquei da forma que vc postou. Não da mais erro porem o select não funciona. Não entrando nunca dentro do meu select e eu sei que é por causa das datas pois tenho esse esse select em todas as minhas paginas, mas essa é a 1 vez que uso datetime.

    string _strSQL02 = "SELECT * FROM PROGRAPREMONTTUB WHERE CC = '" + TextBoxCentrodeCusto.Text + "' AND ISOMETRICO = '" + DropDownListISOMETRICO.Text + "' AND ITEM = '" + DropDownListITEM.Text + "' AND Convert(varchar(20),DATAI,21) = '" + TextBoxDATAI.Text + "' AND Convert(varchar(20),DATAF,21) = '" + TextBoxDATAF.Text + "'";

               

                SqlConnection con02 = new SqlConnection(_connectionString);

                SqlCommand cmd02 = new SqlCommand(_strSQL02, con02);

                cmd02.CommandType = CommandType.Text;

                using (con02)

                {

                    con02.Open();

                    SqlDataReader dr02 = cmd02.ExecuteReader();

                    if (dr02.Read())

                    {

                        TextBoxRESPONSAVEL.Text = "CODIGO DUPLICADO";

                       

                    }

                    dr02.Close();

                    dr02.Close();

                }

    Aguardo Retorno.

    Obrigado.

    terça-feira, 28 de maio de 2013 16:09
  • Cara você tem que fazer o cast do horario segue exemplo :

      "AND Convert(varchar(20),DATAI,21) >= '" + seutextbox + "00.00..00.000' AND 

    Convert(varchar(20),DATAI,21) <=  '" + seutextbox + "23.59..59000'

    Você tem que passar a hora completa de sua data para que seu select funcione, pois seu campo Datetime no SqlServer grava a data e a hora.

    Se for util marque ou se definir marque como resposta para que todos possa usufruir.

    terça-feira, 28 de maio de 2013 16:21
  • Daniel

    Acho que tem numeros a mais. Tem certeza que é 00.00..000' e 23.59..59000'

    fiquei na duvida e outra o sinal é de igual = e não >= ou <= .

    Se puder postar o codigo eu agradeço.

    Fico no aguardo.

    Obrigado.

    terça-feira, 28 de maio de 2013 16:41
  • Esse codigo funciona usa como exemplo.

     "DateIn >='" + data + " 00:00:00.000'AND " + 
                    "DateIn <='" + datafinal + " 23:59:59.000'";

          Não se esqueça do espaço após concatenar a sua data sendo data+ " ...."

    Se for util marque..

    terça-feira, 28 de maio de 2013 16:56
  • Daniel

    Eu coloquei dessa forma abaixo:

    string _strSQL02 = "SELECT * FROM PROGRAPREMONTTUB WHERE CC = '" + TextBoxCentrodeCusto.Text + "' AND ISOMETRICO = '" + DropDownListISOMETRICO.Text + "' AND ITEM = '" + DropDownListITEM.Text + "' AND DATAI = '" + TextBoxDATAI.Text + "00:00:00.000' AND DATAF = '" + TextBoxDATAF.Text + "23:59:59.000'";

    Porem agora da erro:


    Server Error in '/' Application.



    Conversion failed when converting date and/or time from character
    string.

    Description:
    An unhandled exception occurred during the execution of the current web
    request. Please review the stack trace for more information about the error and
    where it originated in the code.

    Exception Details:
    System.Data.SqlClient.SqlException: Conversion failed when converting date
    and/or time from character string.

    Source Error:
    Line 169:                con02.Open();
    Line 170:                SqlDataReader dr02 = cmd02.ExecuteReader();
    Line 171:                if (dr02.Read())
    Line 172:                {
    Line 173:

    Source File:
    c:\WebSGO\WebSGO\WebApplication1\PrograPreMontTub.aspx.cs    Line:
    171

    Se puder por favor postar o codigo certo eu agradeço muito.

    Aguardo Retorno.

    Obrigado

    terça-feira, 28 de maio de 2013 18:44
  •  Cara segue o exemplo o cast que te enviei....

    Segue : 

    string _strSQL02 = "SELECT * FROM PROGRAPREMONTTUB WHERE CC = '" + TextBoxCentrodeCusto.Text + "' AND ISOMETRICO = '" + DropDownListISOMETRICO.Text + "' AND ITEM = '" + DropDownListITEM.Text + "' AND Convert(varchar(20),DATAI,21) >= '" + TextBoxDATAI.Text + "00:00:00.000' AND Convert(varchar(20),DATAI,21) <= '" + TextBoxDATAI.Text "23:59:59.000'"

     AND Convert(varchar(20),DATAF,21)>= '" + TextBoxDATAI.Text + "00:00:00.000' AND Convert(varchar(20),DATAF,21) <= '" + TextBoxDATAI.Text  + "23:59:59.000'"....

    Essa é uma manieira existe outras de se fazer mais simples mas isso funciona.

    terça-feira, 28 de maio de 2013 18:50
  • Daniel

    Desculpe mas eu não estou entendi seu codigo pois você esta misturando as datas.

    TextBoxDATAI.Text = DATAI

    TextBoxDATAF.Text = DATAF

    E no seu codigo esta com sinal de >= ou <= e ainda esta misturando os TextBoxDATAI com o TextBoxDATAF.

    Favor enviar o codigo certo pois dessa forma eu não estou entendo nada e tenho certeza que não vai fucionar pois os campos um não tem nada a ver com o outro.

    Fico no aguardo.

    Obrigado.

    terça-feira, 28 de maio de 2013 18:58
  • Cara da uma olhada em campos DateTime no Sql Server, isso que está fazendo é o cast de datas ou seja ele pega a dataI se ela for maior que 00 horas e a mesma dataI até as 23.59 ou seja pega a data do dia que voce nescessita, teste esse select somente como query, usa o debug e pega o valor e poe no sqlserver e veja que assim irá funcionar.
    terça-feira, 28 de maio de 2013 19:10
  • convert(varchar(20), DATAI, 120)

    convert(varchar(20), DATAf, 120)


    E é assim : '23:59:59:000'

    Abraço

    terça-feira, 28 de maio de 2013 19:40
  • Bruno

    O codigo que esta me confundindo e o codigo que foi postado anteriormente.

    Eu ja sei que tem que ter o Convert e sei que tem que ter o horario porem não sei como colocar esse codigo ja que o que foi postado anteriormente esta sem o TextBoxDATAF.Text

    string _strSQL02 = "SELECT * FROM PROGRAPREMONTTUB WHERE CC = '" + TextBoxCentrodeCusto.Text + "' AND ISOMETRICO = '" + DropDownListISOMETRICO.Text + "' AND ITEM = '" + DropDownListITEM.Text + "' AND Convert(varchar(20),DATAI,21) >= '" + TextBoxDATAI.Text + "00:00:00.000' AND Convert(varchar(20),DATAI,21) <= '" +TextBoxDATAI.Text + "23:59:59.000'"

    ANDConvert(varchar(20),DATAF,21)>= '" + TextBoxDATAI.Text + "00:00:00.000' ANDConvert(varchar(20),DATAF,21) <= '" + TextBoxDATAI.Text + "23:59:59.000'"....

    Fora que tenho que saber se tem aspas certas e o final esta com ...

    Se puder Bruno posta o codigo certo aqui pra mim por favor.

    Fico no aguardo.

    Obrigado.

    terça-feira, 28 de maio de 2013 19:44
  • Segue 

    string _strSQL02 = "SELECT * FROM PROGRAPREMONTTUB WHERE CC = '" + TextBoxCentrodeCusto.Text + "' AND ISOMETRICO = '" + DropDownListISOMETRICO.Text + "' AND ITEM = '" + DropDownListITEM.Text + "' AND Convert(varchar(20),DATAI,120) >= '" + TextBoxDATAI.Text + "00:00:00.000' AND Convert(varchar(20),DATAI,120) <= '" +TextBoxDATAI.Text "23:59:59.000'"

    ANDConvert(varchar(20),DATAF,120)>= '" + TextBoxDATAI.Text + "00:00:00.000'ANDConvert(varchar(20),DATAF,120) <= '" + TextBoxDATAI.Text "23:59:59.000'"

    terça-feira, 28 de maio de 2013 19:59
  • Bom eu coloquei de acordo com o codigo acima mas mesmo assim não funcionou.

    Não da erro, porem não entra na minha condição.

    Eu acredito que seja por causa do sinal de <= ou >=. Pois eu não estou procurando intervaloes de datas e sim que as datas sejam iguais.

    Porem se estiver certo o sinal. Me indiquem o qu esta de errado no meu codigo.

    Se alguem puder me ajudar eu agradeço muito.

    Fico no aguardo.

    Obrigado.

    quarta-feira, 29 de maio de 2013 11:34
  • Agrupe seus filtros em parentes para melhor entendimento
    quarta-feira, 29 de maio de 2013 13:14
  • Paulo testei aqui funciona corretamente assim :

    WHERE  Convert(varchar(20),DATAI,120) >= '2013-05-27 00:00:00.000' AND Convert(varchar(20),DATAI,120) <= '2013-05-27 23:59:59.000'

    Faz o debug e verifica se as datas está valida, e testa a query direto no sqlserver para ver se há dados no seu banco com o filtro que você nescessita.

    quarta-feira, 29 de maio de 2013 16:44