Wie man nullable DateTime aus der Datenbank
Mein SQL-Server-Datenbank enthält nullable DateTime-Werte. Wie kann ich konvertieren Sie Sie in einem nullable DateTime-Objekt in meiner Anwendung in C#?
Dies ist, was ich würde denken, dass es Aussehen würde, aber es funktioniert nicht:
DateTime? dt = (DateTime?) sqldatareader[0];
Wie funktioniert es also nicht? Bekommen Sie eine Ausnahme?
Bitte don ' T müssen Ihre Titel mit tags. Gibt es tags für einen Grund.
Bitte don ' T müssen Ihre Titel mit tags. Gibt es tags für einen Grund.
InformationsquelleAutor pikachu | 2012-02-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen SQL-null ist nicht das gleiche wie eine .NETTO-null"; Sie vergleichen müssen, um gegen System.DBNull.Wert:
In Antwort auf Ihren Kommentar, den Datentyp der
Item
Eigenschaft einesDataReader
ist, dass der zugrunde liegende Datenbank-Typ. Könnte es seinSystem.Data.SqlTypes.SqlDateTime
für ein nicht-null-SQL-Server-Datenbank, oderSystem.DBNull
für eine null-Spalte, oderSystem.Data.Odbc.OdbcTypes.SmallDateTime
für eine ODBC-Datenbank, oder wirklich einfach über alles. Die einzige Sache, die Sie sich verlassen können ist, dass es vom Typobject
.Dies ist auch der Grund, warum ich schlage vor, mit
Convert.ToDateTime()
statt Typumwandlung zuDateTime
. Es gibt keine Garantie für eine ODBC-oder was auch immer Datum-Spalte kann dazu gezwungen eine .NETDateTime
. Ich Stelle fest, Ihr Kommentar gibt einen "sqldatareader", und ein SQL ServerSystem.Data.SqlTypes.SqlDateTime
kann in der Tat dazu gezwungen eineSystem.DateTime
, aber deine ursprüngliche Frage nicht uns sagen, dass.Für weitere Informationen über die Verwendung
DataReader
s, consult MSDN.InformationsquelleAutor Dour High Arch
Vor kurzem fand ich diesen trick, es ist ganz einfach:
Sehr schöne präzise Lösung! Ich werde dies von nun an statt der umständlichen ternären Methode.
Können Sie dies erläutern? Ich kann nicht verstehen, was und warum es"? " nach dem DateTime.
InformationsquelleAutor pikachu
Müssen Sie prüfen, ob der Wert "DBNull" statt einfach null. Ich habe eine kleine helper-Klasse, auf meinem blog: http://improve.dk/archive/2007/10/08/handling-dbnulls.aspx
Sobald Sie die Klasse implementieren, verwenden Sie es so:
InformationsquelleAutor Mark S. Rasmussen
Ich vor einer Weile schrieb eine Reihe von extension-Methoden für eine DataRow zu tun, nur diese Art von downcasting...weil ich hasse schreiben wiederholende Gefasel. Die Verwendung ist einfach:
Hier ist das Stück für DateTime-Werte. Hinzufügen von Implementierung für andere Datentypen sollte ziemlich trivial. Wäre nicht schwer zu tun, die gleiche Art von Sache zu einem DataReader war, wenn man so geneigt ist.
Ich habe versucht zu kommen mit generischen Methoden, aber Einschränkungen in der Weise, Generika sind fertig gemacht, die es schwierig oder unmöglich zu tun, und immer noch das Verhalten, das ich wollte (z.B.
null
Werte eher alsdefault(T)
— immer default-Werte für die SQL Null-Werte zulassen würde, dass die Unterscheidung zwischen0
undnull
...schwierig).InformationsquelleAutor Nicholas Carey
InformationsquelleAutor Paddy
Verwenden Sie einfach:
Machen es Euch leicht 🙂
InformationsquelleAutor MTELab
how über das erstellen von Helfer-Methode
Nutzung
InformationsquelleAutor Usman Ali