2011-04-13 11 views
8

Intenté buscar en todas partes y no ir.Cómo convertir el valor SqlDateTime a .Net :: DateTime

El enfoque hasta ahora es DateTime dt = (DateTime)sqlparam.Value;. Lo que puedo imaginar puede fallar en diferentes configuraciones, diferentes configuraciones regionales de SQL, diferentes configuraciones regionales de PC, etc. Pero, de nuevo, analizar el valor de la cadena de fecha y hora SQL es una idea aún más loca.

¿Existe una solución de trabajo para esto, es .NET, debería haber una, ¿verdad?

+0

Sí, la representación binaria es DATETIME, y no creo que sea binaria compatible con Net :: DateTime, también, el depurador muestra una cadena de tiempo extraña y no estoy seguro de que la conversión interna se realice correctamente, no a través de algunos DateTime :: TryParse ((sqlparam como objeto) .ToString()); – Coder

Respuesta

4

No veo qué hay de malo en expulsarlo explícitamente, así es como lo haría.

Si sus problemas están siendo causados ​​por "diferentes configuraciones, diferentes configuraciones regionales de SQL, diferentes configuraciones regionales de PC", entonces usar un método de conversión diferente no ayudará.

Sin embargo, es posible que gusta mirar a este nuevo tipo de datos en SQL Server 2008: DateTimeOffset

+0

Parece que funciona, espero que esté bien, aunque no estoy seguro, ya que .NET está muy lejos del metal, ni idea de lo que hace debajo. – Coder

4
using System; 

class Program 
{ 
    static void Main() 
    { 
    // Taken from MySQL: SELECT CURTIME() 
    //     SELECT TIME(...) 
    string mySqlTime = "23:50:26"; 
    DateTime time = DateTime.Parse(mySqlTime); 

    // Taken from MySQL: SELECT TIMESTAMP(...) 
    string mySqlTimestamp = "2003-12-31 00:00:00"; 
    time = DateTime.Parse(mySqlTimestamp); 
    Console.WriteLine(time); 

    // Taken from MySQL: SELECT CURDATE() 
    //     SELECT DATE(...) 
    string mySqlDate = "2008-06-13"; 
    time = DateTime.Parse(mySqlDate); 
    Console.WriteLine(time); 
    } 
} 
+0

Las fechas 2008-20-10 == 2008-10-20 == 10-20-2008 == 20-10-2008 == etc. Eso es lo que parece ser el problema, especialmente si tengo que implementar la aplicación de nuevo PC con diferentes opciones regionales. – Coder

2

Sólo echarlo a DateTime. Si es anulable, ejecútelo a Nullable, que también se puede escribir como "DateTime?".

DateTime? value = (DateTime?)resultSet["myDateColumn"]; 

vistazo a la SqlDateTime Class

tiene un métodos Parse puede analizar que cadena en la SqlDateTime después fundido en DateTime

13

La clase SqlDateTime tiene una propiedad Value que ya es del tipo DateTime. ¿Por qué sería necesaria alguna conversión? Simplemente use el Value directamente.

+0

Pero el parámetro es 'SqlParameter (" @ param ", System.Data.SqlDbType.DateTime);' not 'SqlDateTime' – Coder

Cuestiones relacionadas