我正在使用C#和DAAB 4.0框架从数据读取器中读取列类型为dbtype.time的MS SQL 2008数据库的结果。如何将DbType.Time的Datareader结果转换为Timespan对象?
我的问题是MSDN文档说dbtype.time应该映射到一个时间跨度,但我看到的时间跨度的唯一关闭构造函数接受一个long,并且从datareader返回的结果不能被转换为long或直接转换为时间跨度。
我发现这个Article这显示datareader.getTimeSpan()方法,但daab 4.0中的datareader似乎没有此方法。
那么如何将结果从datareader转换为时间跨度对象呢?
你和Ken的解决方案都很好。但是,如果值为空,Ken的解决方案的异常消息更具描述性。 `SqlNullValueException - 数据为空。此方法或属性无法在空值上调用VS'InvalidCastException - 指定的转换无效。 – TheWanderingMind 2015-05-05 15:28:56
要回答BishopBarber评论,如果列可以为空,你应该将其转换为TimeSpan?可为空类型并检查null。 `时间跨度? span = reader [“tsfield”] == DBNull.Value? (TimeSpan?)null:(TimeSpan?)reader [“tsfield”]` – 2016-06-21 07:39:50