Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

cintiadel

[Resolvido] erro: out-of-range datetime value

Recommended Posts

Estou com o seguinte erro: The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.

The statement has been terminated.

 

estou fazendo um select em um campo datetime no sql2005 que no banco esta no seguinte formato : yyyy-MM-dd hh:mm:ss

mas qdo vou trabalhar com ele na minha aplicação ele me mostra dd/MM/yyyy

 

ja tentei ate converter de varias formas:

Format(Convert.ToDateTime(dr_sei("campo"),"yyyy-MM-dd")

ou

exerc = Format(dr_sei("campo"), "yyyy-MM-dd")

ou

texercicio = texercicio.Year & "-" & texercicio.Month & "-" & texercicio.Day

 

ja tentei tbm convert direto no comando sql e nda

 

n faço ideia do q pode estar acontecendo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu gosto de usar os métodos "tipados" do DataReader, assim:

DateTime minhaData = dr.GetDateTime(dr.GetOrdinal("campo_que_eh_data"))
int meuNumero = dr.GetInt32(dr.GetOrdinal("campo_que_eh_numerico"))

Compartilhar este post


Link para o post
Compartilhar em outros sites

tentei das duas formas e nda

bom vou tentar explicar de novo:

na minha tabela do sql, na base de dados o campo que eu preciso esta como datetime, e no seguinte formato:

yyyy-MM-dd hh:mm:ss. Exemplo:2009-01-27 00:00:00.000

tenho q pegar o valor desse campo, e jogar em outra tabela fazendo um insert.

qdo peço para ser exibido na tela o meu comando insert ele mostra esse campo com o seguinte valor: dd/MM/yyyy, no caso 27/1/2009.

e qdo peço pra exibir em um grid pra ver como ele está pegando o valor, ele mostra: 27/1/2009 00:00:00, mas é certeza q no banco esta: 2009-01-27 00:00:00.000

pq ele n esta pegando corretamente? e o q devo fazer pra corrigir essa falha????

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ocorre o mesmo erro, tanto com o código que eu postei e o código que o Oenning postou?

 

Abraços...

yes, ja ate tentei abrir um novo projeto pra tentar fazer de novo, mas da o mesmo erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certeza que esse seu campo é data. Qual é o retorno do select se você alimentar um campo string?

 

Abraços...

Sim tanto na tabela origem quanto na tabela de destino o campo esta como datetime.

Se eu mudo pra varchar, na tabela de destino funciona.

Tentei fazer o insert direto no banco colocando a data nesse formato "2009-01-27 00:00:00.000" funciona, mas na aplicação ela tah pegando a data em outro formato como ja disse.

já tentei de todas essas formas, debugando percebi que nessa linha:

texercicio = Convert.ToDateTime("1900-01-01")
tbm n tah ocorrendo a formataçao

segue o codigo:

Dim texercicio As Date
			If IsDBNull(dr_sei("texercicio")) Then
				texercicio = Convert.ToDateTime("1900-01-01")
			Else
				'texercicio = dr_sei.GetDateTime(dr_sei.GetOrdinal("texercicio"))
				'texercicio = Convert.ToDateTime(dr_sei("texercicio")).ToString("dd/MM/yyyy")
				'texercicio = Format(dr_sei("texercicio"), "yyyy-MM-dd")
				Dim dia_texercicio = Day(dr_sei("texercicio"))
				Dim mes_texercicio = Month(dr_sei("texercicio"))
				Dim ano_texercicio = Year(dr_sei("texercicio"))
				texercicio = ano_texercicio & "-" & mes_texercicio & "-" & dia_texercicio
				'texercicio = texercicio.Year & "-" & texercicio.Month & "-" & texercicio.Day
			End If
			sql.CommandText = sql.CommandText & texercicio & "',"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certeza que esse seu campo é data. Qual é o retorno do select se você alimentar um campo string?

 

Abraços...

tentou no SQL forçá-lo para string?

Ex: Select minha_data_string = Convert(varchar(19), campo_que_eh_data , 120) From Minha_Tabela

 

 

mas na hora de ler com o DataReader teria que ler assim:

 

string minhaData = dr.GetString(dr.GetOrdinal("minha_data_string"))

 

Abraços,

Romulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos por parte, só alimentar a variável tem que dar certo.

O erro que você postou ocorre quado tenta gravar no banco ou quando tentar alimentar a variável.

 

Abraços...

nos dois casos ele apresenta a data da seguinte forma 27/1/2009

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então primeira passo OK, gravo na variável certo?

Como esta seu insert no banco de dados?

 

Abraços...

consegui fazer mudando o tipo da variavel para string

agora estou com o mesmo erro mas é num select

"SELECT * FROM [tabela] where dt_entrega BETWEEN '" & Now.Date & "' and '" & Now.Date.AddDays(-2) & "'"
no banco a data está no seguinte formato: dd/MM/yyyy hh:mm:ss - Exemplo: 1/5/2009 00:00:00

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode ser. Mas faça utilizando os recursos do C# e não do Sql.

 

Abraços...

estou fazendo da seguinte forma mas ele n está entrando no while por algum motivo, no banco tbm n tah retornando, mas tem dados na tabela q atende as condições

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound

		Dim conexao As New Data.SqlClient.SqlConnection("conexao")
		Dim comando As New Data.SqlClient.SqlCommand
		Dim dtentrega As Data.SqlClient.SqlDataReader

		Dim lbl_atraso As Label = CType(e.Row.FindControl("lbl_atraso"), Label)

		If e.Row.RowType = DataControlRowType.DataRow Then
			conexao.Open()
			comando.Connection = conexao
			comando.CommandText = "SELECT * from tabela where dt_entrega BETWEEN '" & Now.Date.ToString("yyyy-MM-dd") & "' and '" & Now.Date.AddDays(-2).ToString("yyyy-MM-dd") & "'"
			dtentrega = comando.ExecuteReader()
			While dtentrega.Read()
				If ((CType(dtentrega("dt_entrega"), DateTime) = Date.Now.Date)) Then
					lbl_atraso.Text = "Já venceu o prazo de entrega"
				ElseIf ((CType(dtentrega("dt_entrega"), DateTime) = Date.Now.Date.AddDays(-2))) Then
					lbl_atraso.Text = "Faltam 2 dias para o prazo de entrega"
				End If
			End While

		End If
		conexao.Close()
	End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.