Comment Convertir le Datareader Résultat de DbType.Temps pour Objet Timespan?
Je suis de la lecture d'un résultat à partir d'une Base de données MS SQL 2008 avec une colonne de type de dbtype.le temps d'un datareader, à l'aide de c# avec DAAB framework 4.0.
Mon problème est le MSDN docs dire dbtype.le temps doit correspondre à un temps mais la seule près constructeur de plage de temps, je vois accepte un long, et le résultat retourné depuis le datareader ne peut pas être converti en long, ou directement sur une plage de temps.
J'ai trouvé ce L'Article ce qui montre datareader.getTimeSpan() la méthode, mais le datareader dans daab 4.0 ne semble pas avoir cette méthode.
Alors, comment puis-je convertir le résultat de l ' objet datareader pour un objet timespan ?
Vous devez vous connecter pour publier un commentaire.
GetTimeSpan
est une méthode deOleDbDataReader
etSqlDataReader
(mais pas de la plus générique IDataReader interface qui DAAB deExecuteReader
retours). Je suis en supposant que leIDataReader
instance qui DAAB a renvoyé à vous est en fait une instance deSqlDataReader
. Cela vous permet d'accéder à laGetTimeSpan
par la méthode de moulage de laIDataReader
instance appropiately:Edit: Si le
IDataReader
instance n'est pas unSqlDataReader
alors vous pourriez être à côté de laprovider
attribut de votre chaîne de connexion définie dans votre application.config (ou web.config).Avez-vous essayé directe casting comme ça?
Je viens de tester rapidement sur ma machine et fonctionne très bien lorsque "timeField" est une Temps le type de données dans la base de données (SQL).
SqlNullValueException - Data is Null. This method or property cannot be called on Null values
VSInvalidCastException - Specified cast is not valid
.TimeSpan? span = reader["tsfield"] == DBNull.Value ? (TimeSpan?) null : (TimeSpan?) reader["tsfield"]
Voici mon point de vue:
Plus propre, peut-être!
InvalidCastException
pour moi quand il retourne unTIME
type, mais j'essaie de le lire avecGetDateTime()
.Qu'est-ce que l' .NET type de la valeur de la colonne? Si c'est un DateTime, alors vous pouvez passer à la valeur de sa propriété Ticks (long) à la plage de Temps de constructeur. E. g.