none
Campo date no válido RRS feed

  • Pregunta

  • Hola:

    He tenido que reinicializar el servidor Windows 2012 r2.

    Ahora me da un error las páginas que no me daba antes:

    La conversión de la cadena "09 Abr 2016" en el tipo 'Date' no es válida.

    Me temo que sea el lenguaje. No sé cómo cambiarlo. El sql 2014 es en español. Y el Windows 2012 r2 creo que también.

    Aquí se ve el error:

    http://cresolia.com/administracion/default.aspx?idioma=1

    ¿Cómo solucionarlo?

    Muchísimas gracias de antemano.



    • Editado volar.2016 viernes, 8 de abril de 2016 20:29
    viernes, 8 de abril de 2016 20:28

Respuestas

  • Si no te queda más remedio que almacenarlo en un campo de texto te recomendaría utilizar un formato que puedas controlar con más facilidad como puede ser el "ODBC canónico" (código 120).

    De esta forma podrás convertirlo en .NET con:

    Dim fecha As Date = Date.ParseExact(fechaString, "yyyy-MM-dd HH:mm:ss", CultureInfo.CurrentCulture)


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta volar.2016 sábado, 9 de abril de 2016 15:10
    sábado, 9 de abril de 2016 11:50

Todas las respuestas

  • El volcado de pila dice qué línea exactamente es la que tiene el error:  maestro.master.vb:line 79.  Muéstrenos el código de ese archivo (al menos la parte que importa).  Por favor incluya la línea 79 y márquela claramente para nosotros.


    Jose R. MCP
    Code Samples

    viernes, 8 de abril de 2016 20:46
    Moderador
  • Hola de nuevo:

    Gracias Webjose. No me había fijado en eso antes.

    El código es

                sqlc.Parameters("@v0").Value = 4403
                cnconexion.Open()
                If sqlc.ExecuteScalar <> "" Then
                    dttermino = sqlc.ExecuteScalar
                    cnconexion.Close()
                    inttermino = Format(DateDiff(DateInterval.Minute, Now, dttermino), "n0")
                    lblresto.Text = "Falta " & inttermino & " " & IIf(inttermino <> 1, "minutos", "minuto")
                End If
                cnconexion.Close()

    Falla en dttermino = sqlc.ExecuteScalar, al coger el valor de la tabla. Este valor es

    09 Abr 2016 2:00:01

    El sp donde meto el valor al campo es

    USE [Cresolia]
    GO
    /****** Object:  StoredProcedure [dbo].[actualizar_varios]    Script Date: 09/04/2016 8:46:06 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[actualizar_varios]
    	(
    	@v0 int=0,
    	@fecha_actualizacion bit=0,
    	@poner_fecha_termino bit=0,
    	@quitar_fecha_termino bit=0
    	)
    
    AS
    	set nocount on
    	if @poner_fecha_termino=1 
    		begin
    			declare @horas decimal
    			select @horas=campo0 from comun.dbo.varios where v0=4405
    			update comun.dbo.varios set campo0=convert(nvarchar(20),dateadd(minute,@horas*60,getdate()),113) where v0=4403
    		end
    	else if @quitar_fecha_termino=1 update comun.dbo.varios set campo0='' where v0=4403
    	     else if @fecha_actualizacion=1 update comun.dbo.varios set campo0=convert(nvarchar(10),getdate(),103) where v0=1
    	          else update comun.dbo.varios set campo0+=1 where v0=@v0
    	

    donde poner_fecha_termino es 1, true

    Gracias por cualquier ayuda.



    • Editado volar.2016 sábado, 9 de abril de 2016 6:50
    sábado, 9 de abril de 2016 6:31
  • Aunque no aparece en tu código entiendo que estás recuperando el valor de un campo de tu base de datos.

    ¿De qué tipo es este campo? Para hacer lo que pretendes debería ser un campo de tipo fecha.

    Si es de tipo cadena deberías recuperar el resultado en una variable de tipo string y realizar la conversión en tu código.

    En cualquier caso siempre se deberían almacenar las fechas en campos de tipo fecha.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    sábado, 9 de abril de 2016 6:41
  • Hola:

    El campo camp0 es nvarchar(100)

    En el sp hago la conversión a nvarchar de la diferencia en horas de 6 horas que tiene el campo0 cuyo idv0=4405 y la fecha de hoy.

    No sé si debería de probar convertiéndolo a mm/dd/yy. Pero aún así creo que debería entender la fecha.

    Gracias por la ayuda


    • Editado volar.2016 sábado, 9 de abril de 2016 8:11
    sábado, 9 de abril de 2016 8:02
  • Hola de nuevo:

    Si el valor de campo0 es

    13/04/2016 2:00:01

    ya me lo hace bien, fecha en español. Ahora tengo que rehacer el convert, no es 113 ¿Cómo hacerlo?

    pasar a formato dd/mm/aaaa hh:mm:ss. 24 horas

    ¿O tal vez es el 113, sin ponerme el mes como 'abr' en vez de 4? No entiendo por qué no me acepta abr.

    Gracias de antemano 







    • Editado volar.2016 sábado, 9 de abril de 2016 9:10
    sábado, 9 de abril de 2016 8:35
  • El formato que más se puede aproximar es el 131 aunque añade los milisegundos.

    Sigo insistiendo aún así en que la mejor opción es almacenar las fechas en campos de tipo fecha.

    Bastante complejo es el tratamiento de fechas como para complicarlo más teniendo que lidiar con conversiones de formatos entre diferentes sistemas.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    sábado, 9 de abril de 2016 9:11
  • Hola:

    Tienes razón, Asier. Manipular fechas es complejo.

    La tabla varios tiene 3 campos

    idv0 - id del registro - int

    descripción - resumén del registro - nvarchar(100)

    campo0 - valor del campo nvarchar(100)

    Esta tabla tiene 350 registros. Es una tabla donde están los campos que no tiene otras tablas, y sirven para administración

    Uno de esos campos es la fecha de término de la actualización, que es la fecha que quiero convertir, la fecha en que termina la actualización de la aplicación. Esta fecha me hace falta porque, si estoy actualizando las páginas, al intentar verlas, el usuario verá el texto 'actualizándose- falta 999 minutos'. Los minutos los hallo de la diferencia de fecha de término de la actualización, que cuando empieza dicha actualización lo inicializo a la fecha resultante de la diferencia de la fecha de comienzo menos las horas que preveo que dure la actualización, y los minutos que pasaron hasta ahora mismo, fecha de ahora.

    Gracias por cualquier ayuda


    • Editado volar.2016 sábado, 9 de abril de 2016 10:10
    sábado, 9 de abril de 2016 10:03
  • Si no te queda más remedio que almacenarlo en un campo de texto te recomendaría utilizar un formato que puedas controlar con más facilidad como puede ser el "ODBC canónico" (código 120).

    De esta forma podrás convertirlo en .NET con:

    Dim fecha As Date = Date.ParseExact(fechaString, "yyyy-MM-dd HH:mm:ss", CultureInfo.CurrentCulture)


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta volar.2016 sábado, 9 de abril de 2016 15:10
    sábado, 9 de abril de 2016 11:50