2011-01-06 18 views
1

Ich habe Daten in einer SQL-Datenbank gespeichert, die ich versuche, in eine ASP.NET MVC-Anwendung zu lesen. Ich kann die Daten gut bekommen - aber die Datumsangaben sind nicht sinnvoll.Wie kann ich SQL Datetime richtig in C# Datetime konvertieren?

Hier ist, was ich bisher haben (einige Daten unkenntlich gemacht "..."):

public JsonResult GetXYZByStatusJson() 
    { 
     var sqlConn = new SqlConnection(...); 
     var command = new SqlCommand("...", sqlConn); 

     command.CommandType = CommandType.StoredProcedure; 
     command.Parameters.AddWithValue("@status", 0); 

     sqlConn.Open(); 
     var sqlResult = command.ExecuteReader(); 

     var collection = new Collection<Object>(); 
     while (sqlResult.Read()) 
     { 
      collection.Add(new XYZ(
       ... 
       Convert.ToDateTime(sqlResult["DateSent"]), 
       Convert.ToDateTime(sqlResult["DateDue"]), 
       ... 
       )); 
     } 

     sqlResult.Close(); 
     sqlConn.Close(); 

     return Json(collection); 
    } 

Das resultierende JSON ist fein formatiert, aber die Daten aussehen „\/Date (1294120800000) \/"

Wie kann ich das SQL-Datum in eine C# DateTime korrekt umwandeln? Die Verwendung von .ToString() hat keine Auswirkungen.

+1

von SQL zu erstellen meinen Sie SQL Server? Wenn Sie nicht welchen Datenbankserver verwenden? –

+3

Wie behalten Sie Ihre Datetime-Werte in der Datenbank? Welchen Typ verwendest du? – HABJAN

+1

@Jim - da er einen 'SqlCommand' verwendet, ist es sicher, SQL Server zu nehmen –

Antwort

2

Es gibt nichts falsch mit der Konvertierung zwischen Sql Server und C#.

Das Problem ist, wie JsonResult formatiert die Zeichenfolge.

Die folgende Frage SO zeigt, wie Sie es auf Client-Seite verarbeiten kann: How do I format a Microsoft JSON date?

Der andere Weg ist Ihre eigene Alternative zu JsonResult

+0

+1 und die Server-Seite http://blogs.microsoft.co.il/blogs/pini_dayan/archive/2009/03/12/convert-objects-to-json-in-c-using-javascriptserializer.aspx verwenden Sie die Deserialize Methode obwohl http://StackOverflow.com/Questions/401756/Parsing-JSon-Susing-JSON-NET – user44298

+0

Ich habe gerade diesen Kommentar auf @ Nicklamort Antwort vor einer Sekunde verlassen. Gute Arbeit, das zu sehen. – arthurakay

+0

Ehh? Ich habe vorher geantwortet ... – jgauffin

0

Wenn es SQL Server ist, sqlResult ["DateSent"]. ToString() wird Ihnen etwas wie folgt geben: "6/9/1999 12:00:00 AM, 8/15/1999 12:00: 00 AM "

Verwenden Sie die integrierten String-Methoden (.IndexOf(), .Remove(), etc) oder erstellen Sie Ihre eigenen, um alles, was Sie brauchen, aus dieser Zeichenfolge zu analysieren.

+0

Es tut mir leid, die Beispielzeichenfolge, die ich dir gab, hat zwei Datumswerte darin. Es sollte einfach so aussehen: "6/9/1999 12:00:00" –

+1

Hmmm ... Ich denke mein Problem liegt tatsächlich in der JSON-Serialisierung. Beim Durchlaufen des Debuggers sieht es so aus, als wäre der Wert korrekt in DateTime umgewandelt worden - aber die Benutzeroberfläche hat immer noch diesen unverständlichen Wert. – arthurakay