2009-03-17 17 views
26

he consiguió esto en un DECLARACIÓN INSERT para MSSQL 2008¿Qué es datetime2?

System.Data.SqlClient.SqlException: La conversión de un conjunto de datos datetime2 tipo a un tipo de datos de fecha y hora resultó en una fuera de la valor de rango

+5

El problema se produjo cuando un Marco de la entidad utiliza para insertar una System.DateTime en mi SQL2008 DB. Cambié el tipo de datos en DB a datetime2 y ahora todo funciona sin problemas. – Glenn

+5

El problema fue que comenzaba con un error lógico y DateTime nunca se inicializó, es decir, traté de insertar 0001-01-01 00: 00: 00.0000000 – Glenn

+4

Este me consiguió cuando no inicié un DateTime en EF4 porque tenía un valor predeterminado de GetDate() en la base de datos. – Will

Respuesta

16

Define una fecha que se combina con un tiempo de días que se basa en reloj de 24 horas. datetime2 se puede considerar como una extensión del tipo de fecha y hora existente que tiene un rango de fechas más grande, una precisión fraccional predeterminada más grande y una precisión opcional especificada por el usuario.

http://technet.microsoft.com/en-us/library/bb677335.aspx

2

De technet:

Define una fecha que se combina con un momento del día que se basa en formato de 24 horas. datetime2 se puede considerar como una extensión del tipo de fecha y hora existente que tiene un rango de fechas más grande, una precisión fraccional predeterminada más grande y una precisión opcional especificada por el usuario.

Tuve que verificar porque pensé que datetime2 tenía alguna relación con varchar2. Aparentemente, no hay relación en absoluto.

Ponga su código para que podamos adivinar qué causó el problema.

20

El tipo de datos datetime de SQLServer es un rango mucho más pequeño de valores permitidos que el tipo de datos .net datetime. El tipo de fecha y hora de SQLServer básicamente es compatible con el calendario gregoriano, por lo que el valor más pequeño que puede tener es 1/1/1753. En 2008 SQLServer agregó un tipo de datos datetime2 que admite volver al año 1 (no hubo año 0). Parece que está intentando insertar un valor de fecha y hora anterior al 1/1/1753 en una columna de SQL Server de fecha y hora (no fecha2)

+1

Gracias! Información impresionante! –

+1

Votado para responder a lo que el usuario realmente necesitaba saber en lugar de la pregunta literal :) –

+0

+1 gran respuesta, gracias – Dal

1

Podría ser que su tabla de base de datos tenga una columna "DATETIME" o "SMALLDATETIME" y usted ¿Estás tratando de insertar una fecha fuera de rango? DATETIME cubre 1753-1-1 a 9999-12-31, mientras que SMALLDATETIME cubre 1900-1-1 hasta 2079-6-6 solamente.

El nuevo tipo de datos SQL Server 2008 DATETIME2 cubrirá 0001-1-1 a 9999-12-31.

Marc

0

Tengo este error cuando mi columna de la base de datos fue creada como NOT NULL y se especifica concretamente un anulable = true en mi propiedad DateTime en mi EntityType marco ADO.Entity.

solucionarlo hago la anulable propiedad = (ninguno)

Cuestiones relacionadas