Problemas con fechas y tiempos (NET y SQL)

26/02/2004 - 18:34 por Emiliano | Informe spam
Estoy trabajando con Visual Basic NET y SQLServer y tengo
el siguiente problema:
Pongo una hora en la base de datos (manualmente) en un
campo de tipo DateTime.
Cuando recojo los valores de la tabla por medio de un
procedimiento almacenado paso el valor a un tipo de dato
DateTime este contiene el valor de una fecha (algo asi
como 30/12/1899, creo) mas la hora correspondiente.
Por otro lado cuando intento grabar una hora (que esta
correctamente escrita) me tira un error de
desbordamiento
Alguna idea??? Agradeceria cualquier colaboración

Preguntas similare

Leer las respuestas

#6 Anonimo
26/02/2004 - 21:33 | Informe spam
Lo que probe no funciono :(
Cuando se ejecuta
lHoraDeIncremento.Hora = CType(cmbHora.Text, DateTime)

Queda en lHoraDeIncremento.Hora -> #12:23:00 PM#


Despues de varios pasos intermedios el valor sigue siendo
#12:23:00 PM#


La excepcion que tira es

"SqlDateTime overflow. Must be between 1/1/1753 12:00:00
AM and 12/31/9999 11:59:59 PM."

Claro, pero en realidad es una hora y no una fecha

El procedimiento ahora lo modifique asi:
(NO SE SI ERA como me decian pero es lo que vi en la ayuda)
CREATE PROCEDURE HoraDeIncrementoInsert
@Nombre varchar(50),
@Hora datetime
AS

INSERT INTO [HoraDeIncremento] (Nombre, Hora)
VALUES
(@Nombre, CONVERT(DateTime, @Hora, 113))

RETURN @@IDENTITY
GO


Tambien me fije en con otros codigos aparte del 113 (lo
saque de la ayuda) pero no funciono.
Hace una cosa!! la variable Hora pasala asi

'YYYYMMDD HH:mm:ss' y me decis como te fue, esto lo


podrias hacer desde el
mismo Store con un Convert o desde el Cliente, como mas


te guste, si lo
haces desde el cliente pone que la var @hora sea Char(10)


por ejemplo

Proba y decinos

Bye


Salu2
-


-
Maxi
Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET
[Maxi_accotto[arroba]speedy[punto]com[punto]ar
MSN:
-


-


escribió en el


mensaje
news:27e801c3fc97$e6bdb740$
Por si sirve este es el procedimiento que utilizo para el
INSERT


CREATE PROCEDURE HoraDeIncrementoInsert
@Nombre varchar(50),
@Hora datetime
AS

INSERT INTO [HoraDeIncremento] (Nombre, Hora)
VALUES
(@Nombre, @Hora)

RETURN @@IDENTITY
GO

La hora la escribo manualmente en un combo, como por
ejemplo 12:00:00, la paso a una variable DateTime (que


veo
mediante un watch que esta correcta) y luego se ejecuta


el
procedimiento (que aparentemente es correcto, tiene el
mismo tipo, etc)
No te paso todo el codigo porque es un poco complicado,


la
aplicacion esta dividida en varias capas y se hace
complicado...

lHoraDeIncremento.Hora = CType(cmbHora.Text, DateTime))

Las clases que se encargan de grabar en la base funcionan
bien porque son las mismas que utilizo para hacer todo.

Como estas guardando la Hora? pasame la forma que lo


intentas hacer si?


Salu2






-
-
-
Maxi
Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET
[Maxi_accotto[arroba]speedy[punto]com[punto]ar
MSN:






-
-
-


"Emiliano" escribió en el


mensaje
news:29d601c3fc8e$ce758630$
Estoy trabajando con Visual Basic NET y SQLServer y






tengo
el siguiente problema:
Pongo una hora en la base de datos (manualmente) en un
campo de tipo DateTime.
Cuando recojo los valores de la tabla por medio de un
procedimiento almacenado paso el valor a un tipo de dato
DateTime este contiene el valor de una fecha (algo asi
como 30/12/1899, creo) mas la hora correspondiente.
Por otro lado cuando intento grabar una hora (que esta
correctamente escrita) me tira un error de
desbordamiento
Alguna idea??? Agradeceria cualquier colaboración




Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system




(http://www.grisoft.com).
Version: 6.0.593 / Virus Database: 376 - Release Date:


20/02/2004


.



.






Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.593 / Virus Database: 376 - Release Date:


20/02/2004


.

Respuesta Responder a este mensaje
#7 ulises
26/02/2004 - 21:51 | Informe spam
El campo del SQL es un datetime, es decir SIEMPRE lleva
fecha y hora, si realizas lo siguiente en el Query
Analyzer :

CREATE TABLE tablita ( campo datetime )
go
INSERT tablita VALUES ( '11:10:00' )
go
SELECT * FROM tablita
go

verás que el resultado te asume una fecha :

campo
1900-01-01 11:10:00.000

(1 row(s) affected)

en este caso la fecha base, puedes hacer la mismo, es
decir asumir una fecha y grabarla de esa manera luego al
momento de extraerla la puedes eliminar y quedarte solo
con la hora.

Saludos,
Ulises

Lo que probe no funciono :(
Cuando se ejecuta
lHoraDeIncremento.Hora = CType(cmbHora.Text, DateTime)

Queda en lHoraDeIncremento.Hora -> #12:23:00 PM#


Despues de varios pasos intermedios el valor sigue siendo
#12:23:00 PM#


La excepcion que tira es

"SqlDateTime overflow. Must be between 1/1/1753 12:00:00
AM and 12/31/9999 11:59:59 PM."

Claro, pero en realidad es una hora y no una fecha

El procedimiento ahora lo modifique asi:
(NO SE SI ERA como me decian pero es lo que vi en la


ayuda)
CREATE PROCEDURE HoraDeIncrementoInsert
@Nombre varchar(50),
@Hora datetime
AS

INSERT INTO [HoraDeIncremento] (Nombre, Hora)
VALUES
(@Nombre, CONVERT(DateTime, @Hora, 113))

RETURN @@IDENTITY
GO


Tambien me fije en con otros codigos aparte del 113 (lo
saque de la ayuda) pero no funciono.
Hace una cosa!! la variable Hora pasala asi

'YYYYMMDD HH:mm:ss' y me decis como te fue, esto lo


podrias hacer desde el
mismo Store con un Convert o desde el Cliente, como mas


te guste, si lo
haces desde el cliente pone que la var @hora sea Char




(10)
por ejemplo

Proba y decinos

Bye


Salu2





-
-
Maxi
Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET
[Maxi_accotto[arroba]speedy[punto]com[punto]ar
MSN:





-
-


escribió en el


mensaje
news:27e801c3fc97$e6bdb740$
Por si sirve este es el procedimiento que utilizo para el
INSERT


CREATE PROCEDURE HoraDeIncrementoInsert
@Nombre varchar(50),
@Hora datetime
AS

INSERT INTO [HoraDeIncremento] (Nombre, Hora)
VALUES
(@Nombre, @Hora)

RETURN @@IDENTITY
GO

La hora la escribo manualmente en un combo, como por
ejemplo 12:00:00, la paso a una variable DateTime (que


veo
mediante un watch que esta correcta) y luego se ejecuta


el
procedimiento (que aparentemente es correcto, tiene el
mismo tipo, etc)
No te paso todo el codigo porque es un poco complicado,


la
aplicacion esta dividida en varias capas y se hace
complicado...

lHoraDeIncremento.Hora = CType(cmbHora.Text, DateTime))

Las clases que se encargan de grabar en la base






funcionan
bien porque son las mismas que utilizo para hacer todo.

Como estas guardando la Hora? pasame la forma que lo


intentas hacer si?


Salu2
-








-
-
-
-
Maxi
Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET
[Maxi_accotto[arroba]speedy[punto]com[punto]ar
MSN:
-








-
-
-
-


"Emiliano" escribió en el


mensaje
news:29d601c3fc8e$ce758630$
Estoy trabajando con Visual Basic NET y SQLServer y






tengo
el siguiente problema:
Pongo una hora en la base de datos (manualmente) en un
campo de tipo DateTime.
Cuando recojo los valores de la tabla por medio de un
procedimiento almacenado paso el valor a un tipo de








dato
DateTime este contiene el valor de una fecha (algo asi
como 30/12/1899, creo) mas la hora correspondiente.
Por otro lado cuando intento grabar una hora (que esta
correctamente escrita) me tira un error de
desbordamiento
Alguna idea??? Agradeceria cualquier colaboración




Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system




(http://www.grisoft.com).
Version: 6.0.593 / Virus Database: 376 - Release Date:


20/02/2004


.



.






Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system




(http://www.grisoft.com).
Version: 6.0.593 / Virus Database: 376 - Release Date:


20/02/2004


.



.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida