2016-04-01 3 views
1

Ich habe ein Problem, die Millisekunde-Komponente einer DATETIME Spalte zu sehen.Millisekunden nicht in SQL-Ausgabe für DateTime-Typ angezeigt

Der Code, der die Tabelle definiert ist:

string command = string.Format("CREATE TABLE {0}(EventDateTime DATETIME, layer3Id VARCHAR(35), EventType VARCHAR(55), Protocol VARCHAR(30), MessageBody VARCHAR(MAX), MessageContent VARCHAR(MAX))", tableName); 
SendSqlCommand(command); 

Der Code, der die Zeile auffüllt ist:

string insertCommand = string.Format(@"INSERT INTO {0} VALUES (@p1, @p2, @p3, @p4, @p5, @p6)", tablename); 

_con.Open(); 

using (SqlCommand cmd = new SqlCommand(insertCommand, _con)) 
{ 
    cmd.Parameters.AddWithValue("@p1", record.EventDateTime); 
    cmd.Parameters.AddWithValue("@p2", record.layer3Id); 
    cmd.Parameters.AddWithValue("@p3", record.EventType); 
    cmd.Parameters.AddWithValue("@p4", record.Protocol); 
    cmd.Parameters.AddWithValue("@p5", record.MessageBody); 
    cmd.Parameters.AddWithValue("@p6", record.MessageContent); 

    cmd.ExecuteNonQuery(); 
} 

wo der EventDateTime String-Wert ist so etwas wie 2016/01/09 16:10:08.500

Wenn ich laufen eine Abfrage auf dem Tisch bekomme ich zurück: 09/01/2016 16:10:08

Keine Millisekunden. Ich weiß nicht, ob die Werte in die Datenbank gehen oder wenn es die falsche Art zu verwenden oder wenn die Abfrage nicht richtig reagiert:

TestTable.Take (100) 
+0

Nun anzuzeigen, gibt es keine Millisekunden, Oder siehst du sie nicht, weil der Standard-ToString sie nicht anzeigt? Verwenden Sie einen Debugger mit einem Haltepunkt, um die Variable zu überprüfen. Oh, und posten Sie die Tabellendefinition, weil es durchaus möglich ist, dass Sie sie nie in der Datenbank speichern. – TomTom

+2

Sql Server DATETIME speichert Millisekunden (.000-999), so dass das Problem wahrscheinlich darin besteht, wie Sie drucken oder die Ergebnisse betrachten. –

+0

Können Sie die zugrunde liegende Tabelle über [SSMS] (https://en.wikipedia.org/wiki/SQL_Server_Management_Studio) anzeigen? Ein DateTime-Feld wird Millisekunden enthalten, aber sie können auf 000 festgelegt werden, wenn 'record.EventDateTime' diese Granularitätsebene nicht unterstützt. –

Antwort

1

kann also annehmen, dass Sie diese Werte in Ihrer Datenbank haben:

enter image description here

Durch reine sQL-Anweisung ausgeführt wird, sollte Sie in der Lage sein, Datetime im Format abrufen würden Sie antizipieren, mit Millisekunden

enter image description here

Und in Ihrem C#, als Beispiel, können Sie das Format steuern, hier ein Beispiel:

  var res = db.MyTables.Take(100); 

      foreach(var date in res) 
      { 
       Console.WriteLine(Convert.ToDateTime(date.EventDateTime).ToString("dd/MM/yyyy hh:mm:ss.fff")); 
      } 

ist hier die Ausgabe:

enter image description here

0

Es sind Millisekunden. Sie zeigen sie nur nicht an. So

, wenn Sie die Zeit aus der Datenbank zu lesen, müssen Sie es zu formatieren für die Ausgabe wie folgt aus:

string s; 
s.Format("{0:yyy-MM-dd hh:mm:ss.fff}", record.EventDateTime) 

Jetzt können Sie die Variable s