c# - .NET DateTime a SqlDateTime Conversión
(5)
¿Es posible que la fecha realmente esté fuera de ese rango? ¿Viene de la entrada del usuario? Si la respuesta a cualquiera de estas preguntas es sí, entonces siempre debe verificar; de lo contrario, está dejando su aplicación propensa al error.
Puede formatear su fecha para incluirla en una declaración SQL con bastante facilidad:
var sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss");
Al convertir .NET DateTime (cuando está predeterminado (DateTime)) en SqlDateTime, siempre debo verificar si la fecha .NET está entre SqlDateTime.MinValue y SqlDateTime.MaxValue [o] ¿Hay una buena manera de hacerlo?
-Para comparar solo la parte de la fecha, puede hacer:
var result = db.query($"SELECT * FROM table WHERE date >= ''{fromDate.ToString("yyyy-MM-dd")}'' and date <= ''{toDate.ToString("yyyy-MM-dd"}''");
Además, recuerde que las resoluciones [cantidad de tiempo] son diferentes.
http://msdn.microsoft.com/en-us/library/system.data.sqltypes.sqldatetime.aspx
SQL uno es 3.33 ms y .net uno es 100 ns.
Si está buscando DBNULL, convertir un Datetime SQL a .NET DateTime no debería ser un problema. Sin embargo, puede encontrarse con problemas al convertir un .NET DateTime en un SQL DateTime válido.
SQL Server no reconoce las fechas anteriores al 1/1/1753. Ese es el año en que Inglaterra adoptó el Calendario Gregoriano. Por lo general, la comprobación de DateTime.MinValue es suficiente, pero si sospecha que los datos podrían tener años anteriores al siglo XVIII, debe realizar otra verificación o utilizar un tipo de datos diferente. (A menudo me pregunto qué usan los museos en sus bases de datos)
La comprobación de la fecha máxima no es realmente necesaria, SQL Server y .NET DateTime tienen una fecha máxima de 31/12/9999. Puede ser una regla comercial válida, pero no causará ningún problema.
en mi búsqueda para hacer esto con entitie, tropecé con esto, simplemente volviendo atrás para publicar lo que descubrí ...
cuando se usa EF4, la columna de fecha y hora de "sql" puede llenarse desde DateTime de .NET usando BitConverter.
EntitieObj.thetime = BitConverter.GetBytes(DateTime.Now.ToBinary());
también el enlace de Fakrudeen me trajo más lejos ... gracias.