Inquiridor
Erro com DateTime do SQL

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.
Todas as Respostas
-
-
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
Description:
an out-of-range value.
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:
-
-
-
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.
- Editado Daniel Brito br terça-feira, 28 de maio de 2013 12:16
-
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.
-
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.
-
-
-
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
Description:
string.
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:
171Se puder por favor postar o codigo certo eu agradeço muito.
Aguardo Retorno.
Obrigado
-
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.
-
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.
-
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.
-
-
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.
-
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'"
-
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.
-
-
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.