Pregunta

Estoy intentando insertar un valor de solo tiempo, pero aparece el siguiente error

  
      
  • ex {" SqlDateTime overflow. Debe estar entre el 1/1/1753 12:00:00 AM y el 12/31/9999 11:59:59 PM. & Quot;} System.Exception
  •   

Desde el extremo frontal, la hora se selecciona mediante la función " TimeEdit " Control, con las flechas arriba y abajo. La tabla en SQL Server tiene los campos establecidos como smalldatetime. Solo necesito guardar el tiempo. Uso lo siguiente para devolver datos a la aplicación

selecciona id, CONVERT (CHAR (5), timeFrom, 8) como timeFrom, CONVERT (CHAR (5), timeTo, 8) como timeTo DESDE dbo.Disponibilidad. donde id = @id y dayName = @weekday

¿Cómo paso el tiempo solo a la mesa?

Editar ~ Solución Según Euardo y Chris, mi solución fue pasar una cadena de fecha y hora en lugar de una cadena de solo tiempo. Formateé mi resultado según Formato de hora usando " g " ;.

Gracias

¿Fue útil?

Solución

Elija una fecha que esté en el rango (es decir, 1/1/1970) y úsela para todo lo que inserte.

Otros consejos

Puede establecer la fecha en 1/1/1753, que es el valor de fecha mínima para datetime en MSSQL y luego agregar la hora que desea almacenar. Por supuesto, debe considerar esto cada vez que necesite obtener el valor, pero puede envolverlo con algunos ayudantes. O puede usar MSSQL 2008 y usar el nuevo tipo de datos TIME.

Si solo realiza un seguimiento del tiempo, piense en almacenarlo en un int como un desplazamiento de la medianoche en cualquier granualaridad que necesite (segundos, minutos, horas, ...). Luego puede convertirlo en un TimeSpan en su código usando el método apropiado de TimeSpan.From ?? (). Para volver por el otro lado, puedes usar TimeSpan.Total ?? y truncar si es necesario. Si necesita realizar consultas manuales, puede escribir una función SQL que convierta horas / minutos / segundos a un desplazamiento equivalente.

Prefiero esto a usar una fecha y hora y elegir un día arbitrario, ya que aclara el propósito del campo, lo que reduce la confusión.

no hay tal cosa como Tiempo en SQL, solo hay DateTime.

Para su propósito, usaría algo como esto para devolver solo la parte del tiempo.

SELECT (GETDATE() - (CAST(FLOOR(CAST(GETDATE() as FLOAT)) AS DateTime)))

donde GETDATE () es la fecha y hora que desea filtrar.

Al configurar la hora en la base de datos, deberá agregar '01 / 01/1901 'o '01 / 01/1753' a la hora.

No use CAST y Convierta a varchar cuando trabaje con datetime, es lento. Se adhieren a las operaciones numéricas flotantes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top