我正在使用带有DAAB 4.0框架的c#从一个MS SQL 2008数据库中读取一个结果,该数据库的列类型为dbtype.time,来自datareader.
我的问题是MSDN文档说dbtype.time应该映射到一个时间跨度但是我看到的唯一接近时间跨度的接近构造函数接受一个long,并且从datareader返回的结果不能转换为long,或者直接转换为时间跨度.
我发现这篇文章显示了datareader.getTimeSpan()方法,但daab 4.0中的datareader似乎没有这个方法.
那么如何将结果从datareader转换为timepan对象?
你试过像这样的直接演员吗?
TimeSpan span = (TimeSpan)reader["timeField"];
我刚刚在我的机器上测试了这个并且当"timeField"是数据库中的Time数据类型(SQL)时工作正常.
GetTimeSpan
是OleDbDataReader
和SqlDataReader
(但不是DAAB ExecuteReader
返回的更通用的IDataReader接口的方法).我假设IDataReader
DAAB返回给你的实例实际上是一个实例SqlDataReader
.这允许您GetTimeSpan
通过IDataReader
适当地转换实例来访问该方法:
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 ... */ }
编辑:如果IDataReader
实例不是a,SqlDataReader
则可能缺少provider
app.config(或web.config)中定义的连接字符串的属性.