2012-03-01 41 views
2

我不能投PostgreSQL的时间间隔为TimeSpan无法施展PostgreSQL的间隔成C#时间跨度

item.TSHours = dr["Hours"] == DBNull.Value ? TimeSpan.Zero : (TimeSpan)dr["Hours"]; 

是抛出:

“指定的转换无效”

dr["Hours"]返回值"06:00:00":/

我做错了什么?我正在尝试几个版本的npgsql,但没有任何改变。

博士[ “营业时间”]是NpgsqlTypes.NpgsqlInterval

编辑:

我可以使它工作的唯一方法是使用:

new TimeSpan(((NpgsqlTypes.NpgsqlInterval)dr["Hours"]).TotalTicks) 

回答

2

至少你不能直接将字符串转换为TimeSpan。 这将工作:

item.TSHours = dr["Hours"] == DBNull.Value ? TimeSpan.Zero : TimeSpan.Parse(dr["Hours"].ToString()); 

npgsql APi文档:

为了避免强制对谁不需要与他们有关对包含NpgsqlInterval值的字段的GetValue调用用户不必要的提供者特有的担忧将返回一个TimeSpan而不是NpgsqlInterval。

+0

我也是这样想,但比我得到了“TimeSpan无法解析,因为至少有一个数字组件超出范围或包含太多数字”,例如dr [“Hours”]是“73:30:00” – Cfaniak 2012-03-01 07:25:03

+0

好的。我懂了。从npgsql文档添加了一个提示。 – 2012-03-01 07:46:13