Ich ziehe Daten aus einem XML-Feed über C# -Code. Wenn ich die Daten zu bekommen, gibt es eine Datetime in folgendem Format:DateTime Verhalten in SQL Server & C#
<a:updated>2010-11-05T20:21:43.8303793Z</a:updated>
ich gelesen, dass in Variable vom Typ Datetime. Ich habe dann (mit EF) diese Daten in eine Tabelle in meiner DB zu legen.
Später, wenn mein Code zurückläuft, um den Feed erneut herunterzuladen, überprüfe ich, ob der Wert in dem UPDATED-Feld, der in meiner Datenbank gespeichert ist, derselbe ist, der im XML-Feed zurückgegeben wird.
Ich Auswertung:
if (currentApp.Updated < app.Updated)
wo currentApp.Updated ist das, was in meinem DB ist und app.Updated ist, was aus der letzten XML-Feed herunterladen gelesen wurde. Laufen sie jetzt nur, beide (im Debug-Fenster) zeigen:
{12/11/2010 8:13:44 PM}
aber die IF-Anweisung ist die Bewertung als TRUE. Suchen Sie tiefer in die Objekte enthüllt: So
currentApp.Updated.Ticks = 634276952242500000
app.Updated.Ticks = 634276952242511865
wenn an die DB zu speichern, so scheint es, dass entweder C#, EF oder SQL Server die letzten 5 Ziffern Dumping (11865) und Setzen sie auf 0 s (00000).
Farbe mich frustriert. Irgendwelche Ideen, wie man dieses Problem löst? Mein Ideal ist, dass diese IF-Anweisung false ausgibt, da die UPDATED-Zeiten gleich sind.
+1. Ich würde in meiner Antwort die Rundung erwähnen und wünschte mir, ich hätte es getan! ;) –
Wenn Sie mehr Genauigkeit in SQL Server benötigen und ein Upgrade auf SQL Server 2008 oder neuer durchführen können, können Sie DATETIME2 verwenden, das eine Genauigkeit von 100ns aufweist (dasselbe wie der .NET DateTime-Typ). –