I am reading a result from a MS SQL 2008 Database with a column type of dbtype.time from a datareader, using c# with DAAB 4.0 framework.
My problem is the MSDN docs say dbtype.time should map to a timespan but the only close constructor for timespan I see accepts a long, and the result returned from the datareader cannot be cast to a long, or directly to a timespan.
I found this Article whichs shows datareader.getTimeSpan() method, but the datareader in daab 4.0 does not seem to have this method.
So how do I convert the result from the datareader to a timespan object ?
-
GetTimeSpanis a method ofOleDbDataReaderandSqlDataReader(but not of the more generic IDataReader interface which DAAB'sExecuteReaderreturns). I'm assuming that theIDataReaderinstance which DAAB has returned to you is actually an instance ofSqlDataReader. This allows you to access theGetTimeSpanmethod by casting theIDataReaderinstance appropiately:using (IDataReader dr = db.ExecuteReader(command)) { /* ... your code ... */ if (dr is SqlDataReader) { TimeSpan myTimeSpan = ((SqlDataReader)dr).GetTimeSpan(columnIndex) } else { throw new Exception("The DataReader is not a SqlDataReader") } /* ... your code ... */ }Edit: If the
IDataReaderinstance is not aSqlDataReaderthen you might be missing theproviderattribute of your connection string defined in your app.config (or web.config). -
What is the .NET type of the column value? If it is a DateTime then you can pass the value of its Ticks property (long) to the TimeSpan constructor. E.g.
var span = new TimeSpan(colValue.Ticks); -
Have you tried a direct cast like this?
TimeSpan span = (TimeSpan)reader["timeField"];I just tested this quickly on my machine and works fine when "timeField" is a Time datatype in the database (SQL).
0 comments:
Post a Comment