2011-01-12 5 views
1

Bei diesem Projekt bin ich auf der Spur, wenn etwas erstellt, bearbeitet und schließlich verarbeitet wird. Ich habe drei DateTime Felder dafür eingerichtet. Der folgende Code ist für, wenn ich den Datensatz erstellen.SqlDateTime Überlauf, aber ich möchte ein NULL oder MinValue

newsArchive.CreateDateTime = DateTime.Now; 
newsArchive.ModifyDateTime = DateTime.MinValue; 
newsArchive.SendDateTime = DateTime.MinValue; 
naRepository.Add(newsArchive); 
naRepository.Save(); 

Ich erhalte „SqlDateTime Überlauf. Muss zwischen 1753.01.01 00.00.00 und 12/31/9999 11.59.59 sein.“ wenn ich versuche, es hinzuzufügen. Ich weiß, dass ich keinen NULL senden kann. Wie würdest du damit umgehen?

Ich verwende Linq2SQL, um dies zu verarbeiten.

+1

Wenn Sie sagen, dass Sie keine Null senden können, meinen Sie, dass Sie newsArchive.SendDateTime = SqlDateTime.Null nicht verwenden können; oder meinst du, du kannst newsArchive.SendDateTime = null nicht verwenden; ? Ihr Betreff zeigt an, dass NULL akzeptabel wäre. –

Antwort

3

Warum können Sie keine Null senden? AFAIK, Linq2SQL unterstützt Nullwerttypen; Sie benötigen nur die Spalte in der DB, die NULL-Werte zulässt, oder L2S projiziert das DAO nicht mit dem Nullable-Typ.

Sie könnten (DateTime) (SqlDateTime.MinValue) anstelle von DateTime.MinValue verwenden. Dies verwendet den minimalen SQL-kompatiblen Datetime-Wert, der explizit nach DateTime umgewandelt wird.

Obwohl sowohl SqlDateTime als auch DateTime die Zeit tatsächlich als UInt64 "Ticks" -Wert speichern, besteht der Unterschied zwischen den beiden Typen darin, dass SQL Server eine andere Epoche (Wert für Null) und eine andere Auflösung (was 1 "Tick" darstellt) verwendet in Sekundenbruchteilen) als die DateTime der CLR.

+0

Seltsam dachte ich, dass zuvor fehlerhaft. Es funktioniert jetzt. Ich kann '= null' verwenden und es funktioniert gut. Die DateTime auf dem Server erlaubt Nullen. –

0

Ihr eigenes Mindestdatum erstellen - einen Date-Variable mit dem Wert 1753.01.01 00.00.00 und Verwendung, die anstelle von DateTime.MinValue

2

Welche Version von SQL Server verwenden Sie? Wenn Sie SQL 2008 (oder 2008 R2) verwenden, können Sie den Datentyp datetime2 verwenden, der den gesamten Bereich des .NET DateTime-Typs unterstützt.

Andernfalls verwenden Sie NULL (Ihr Modell muss eine Eigenschaft vom Typ Nullable<DateTime> haben) oder leben innerhalb der Grenzen des Datentyps und DateTime.MinValue überschreitet das Limit des SQL-Datetime-Typs.

+0

SQL Server 2005 –

0

Der Datentyp datetime2 ermöglicht Daten bereits im Jahr 1. Sie können DateTime auch verwenden? Nulldaten in Ihrem .net-Code zulassen

Verwandte Themen