当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何将DbType.Time的Datareader结果转换为Timespan对象?》经验,为你挑选了2个好方法。

我正在使用带有DAAB 4.0框架的c#从一个MS SQL 2008数据库中读取一个结果,该数据库的列类型为dbtype.time,来自datareader.

我的问题是MSDN文档说dbtype.time应该映射到一个时间跨度但是我看​​到的唯一接近时间跨度的接近构造函数接受一个long,并且从datareader返回的结果不能转换为long,或者直接转换为时间跨度.

我发现这篇文章显示了datareader.getTimeSpan()方法,但daab 4.0中的datareader似乎没有这个方法.

那么如何将结果从datareader转换为timepan对象?



1> BFree..:

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

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

我刚刚在我的机器上测试了这个并且当"timeField"是数据库中的Time数据类型(SQL)时工作正常.



2> Ken Browning..:

GetTimeSpanOleDbDataReaderSqlDataReader(但不是DAAB ExecuteReader返回的更通用的IDataReader接口的方法).我假设IDataReaderDAAB返回给你的实例实际上是一个实例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则可能缺少providerapp.config(或web.config)中定义的连接字符串的属性.

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有