Wie Konvertiert Datareader Ergebnis DbType.Zeit Timespan-Objekt?
Ich lese ein Ergebnis aus einer MS SQL 2008 Datenbank mit einer Spalte Typ dbtype.Zeit aus einem datareader mit c# mit DAAB 4.0 framework.
Mein problem ist die MSDN docs sagen, dbtype.mal sollte die Karte, um eine Zeitspanne, sondern die nur in der Nähe Konstruktor für timespan ich sehe, nimmt eine lange, und das zurückgegebene Ergebnis aus dem datareader kann nicht gewirkt werden, um eine lange, oder direkt auf eine Zeitspanne.
Fand ich diese Artikel, deren shows datareader.getTimeSpan () - Methode, aber das datareader-Objekt in daab 4.0 nicht zu haben scheinen, diese Methode.
So, wie wandle ich das Ergebnis aus dem datareader zu einem timespan-Objekt ?
InformationsquelleAutor Element | 2009-02-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
GetTimeSpan
ist eine Methode derOleDbDataReader
undSqlDataReader
(aber nicht von der allgemeineren IDataReader-Schnittstelle, die DAAB -ExecuteReader
gibt). Ich gehe davon aus, dass dieIDataReader
Instanz, die DAAB zurückgegeben hat, Sie ist tatsächlich eine InstanzSqlDataReader
. Dies ermöglicht Ihnen den Zugriff auf dieGetTimeSpan
Verfahren durch Gießen derIDataReader
Instanz appropiately:Edit: Wenn die
IDataReader
Instanz ist nicht eineSqlDataReader
dann fehlen Ihnen vielleicht dieprovider
Attribut für die Verbindungszeichenfolge definiert in Ihrer app.config (oder web.config).InformationsquelleAutor Ken Browning
Haben Sie versucht, einen direkten cast wie diesem?
Ich gerade getestet, schnell auf meinem Rechner und funktioniert gut, wenn "Zeit" ist eine Zeit-Datentyp in der Datenbank (SQL).
SqlNullValueException - Data is Null. This method or property cannot be called on Null values
VSInvalidCastException - Specified cast is not valid
.Antwort BishopBarber Kommentar, wenn die Spalte null-Werte zulässt, sollten Sie es konvertieren, um die Zeitspanne? nullable-Typ und auf null prüfen.
TimeSpan? span = reader["tsfield"] == DBNull.Value ? (TimeSpan?) null : (TimeSpan?) reader["tsfield"]
Ich fand diese Lösung besser, weil ich oft nicht auf meine Daten zugreifen reader von index. Ich habe jedoch eine fortgeschrittene Methode zur Prüfung auf null.
InformationsquelleAutor BFree
Hier ist mein nehmen:
Reiniger, vielleicht!
InvalidCastException
für mich, wenn es gibt eineTIME
geben, aber ich versuche zu Lesen, mitGetDateTime()
.InformationsquelleAutor Jason Steele
Was das ist .NET-Datentyp der Spalte Wert? Wenn es ein DateTime-dann übergeben Sie den Wert der Ticks-Eigenschaft (lang), um die Zeitspanne Konstruktor. E. g.
InformationsquelleAutor Adam Ralph