Frage

Während Umwandlung .NET Datetime SqlDateTime (wenn Standard (Datetime) ist) soll ich immer überprüfen, ob das .NET Datum zwischen SqlDateTime.MinValue und SqlDateTime.MaxValue ist [oder] Gibt es einen guten Weg, dies zu tun.

War es hilfreich?

Lösung

Ist es möglich, dass das Datum tatsächlich außerhalb dieses Bereichs sein könnte? Kommt es aus Benutzereingaben? Wenn die Antwort auf eine dieser Fragen ja ist, dann sollten Sie immer überprüfen -. Sonst gehst Sie Ihre Anwendung fehleranfällig

Sie können Ihren Termin für die Aufnahme in einer SQL-Anweisung formatieren ziemlich leicht:

var sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss");

Andere Tipps

Wenn Sie DBNULL prüfen, werden sollte einen SQL-Datetime in einem .NET-Datetime-Konvertierung kein Problem sein. Sie können jedoch auf Probleme stoßen, eine .NET Datetime auf eine gültige SQL-Datetime zu konvertieren.

SQL Server nicht erkennt Datumsangaben vor 1753.01.01. Das ist das Jahr angenommen England den gregorianischen Kalender. In der Regel für DateTime.MinValue Überprüfung ist ausreichend, aber wenn Sie den Verdacht hat, dass die Daten Jahre vor dem 18. Jahrhundert haben könnten, müssen Sie eine weitere Überprüfung machen oder einen anderen Datentyp verwenden. (Ich frage mich oft, was Museen in ihren Datenbanken verwenden)

für max Datum Überprüfung ist nicht wirklich notwendig, SQL Server und .NET Datetime beide haben eine max Datum 12/31/9999 Es ist eine gültige Geschäftsregel sein kann, aber es wird ein Problem nicht verursachen.

Bitte auch merken Auflösungen [Zeitquantum] verschieden sind.

http://msdn.microsoft.com /en-us/library/system.data.sqltypes.sqldatetime.aspx

SQL ist 3,33 ms und .net ist 100 ns.

auf meiner Suche dies mit entitie zu tun, stolperte ich hier über, nur schlagen zurück zu schreiben, was ich herausgefunden habe ...

, wenn EF4 mit „einer SQL“ Datetime-Spalte kann von .NET des Datetime gefüllt werden BitConverter verwenden.

EntitieObj.thetime = BitConverter.GetBytes(DateTime.Now.ToBinary());

auch Fakrudeen des Link mich weiter gebracht ... danke.

-Um vergleichen nur den Datumsteil, können Sie tun:

var result = db.query($"SELECT * FROM table WHERE date >= '{fromDate.ToString("yyyy-MM-dd")}' and date <= '{toDate.ToString("yyyy-MM-dd"}'");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top