代码之家  ›  专栏  ›  技术社区  ›  Element

如何将DbType.Time的Datareader结果转换为Timespan对象?

  •  6
  • Element  · 技术社区  · 16 年前

    我的问题是MSDN文档说dbtype.time应该映射到timespan,但是我看到的timespan的唯一关闭构造函数接受long,并且从datareader返回的结果不能转换为long,也不能直接转换为timespan。

    我找到了这个 Article 其中显示了datareader.getTimeSpan()方法,但daab 4.0中的datareader似乎没有此方法。

    那么,如何将数据读取器的结果转换为timespan对象呢?

    4 回复  |  直到 16 年前
        1
  •  10
  •   BFree    16 年前

    你试过这样的直接演员吗?

    TimeSpan span = (TimeSpan)reader["timeField"];
    

    我只是在我的机器上快速地测试了它,当“timeField”是数据库(SQL)中的时间数据类型时,它可以正常工作。

        2
  •  6
  •   Ken Browning    16 年前

    GetTimeSpan 这是一种 OleDbDataReader SqlDataReader ExecuteReader IDataReader DAAB返回给您的实例实际上是 数据阅读器 GetTimeSpan 方法通过铸造 适当地举例:

    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 ... */
    }
    

    编辑:如果 伊达领班 实例不是一个 那你可能会错过这个机会 provider 在app.config(或web.config)中定义的连接字符串的属性。

        3
  •  1
  •   Mxyk Edda    12 年前

    以下是我的看法:

    
    using (IDataReader reader = db.ExecuteReader(command))
    {
        var timeSpan = reader.GetDateTime(index).TimeOfDay;
    }
    

    也许更干净!

        4
  •  0
  •   Adam Ralph    16 年前

    列值的.NET类型是什么?如果是DateTime,则可以将其Ticks属性(long)的值传递给TimeSpan构造函数。例如。

    var span = new TimeSpan(colValue.Ticks);
    
    推荐文章