使用C#中的Convert.ToDateTime强制转换SQL日期值失败

时间:2015-06-24 19:18:50

标签: c# sql-server datetime datetime-conversion

首先,我得到的错误如下:

  

将varchar数据类型转换为日期时间数据类型会导致超出范围的值。

我所做的是将一组数据从SQL数据库返回到数据表,从那里我在c#代码端运行if语句,以确定一个日期是否大于另一个。这已经在许多部署中起作用,但是在新服务器上的特定部署导致上述错误。

这是我的代码:

if
(
    Convert.ToDateTime(ds.Tables[0].Rows[0]["StartDate"].ToString()).Date >
    Convert.ToDateTime(ds.Tables[0].Rows[0]["OriginalStartDate"].ToString()).Date
)
{
   ... do stuff ...
}

我的理解是,在尝试执行Convert.ToDateTime()

时,列中的数据(转换为字符串)失败了

然而,令人困惑的问题是此代码已在其他服务器上运行,并且此问题已被隔离。所以我觉得它可能是服务器独有的,但我不知道在哪里看。

遗憾的是,更改任何区域设置等都不是一种选择,所以我正试图找到解决方法!

感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

基本上,您不应该首先将值转换为字符串并将其转换回来。尽可能避免字符串转换,除非这是您尝试做的事情的重要部分。在您的情况下,您真的对db.insert({views: {[moduleID]: { 值感兴趣。它们在数据库中是DateTime,您希望它们在代码中为DateTime值,那么为什么要引入字符串?

你应该可以使用:

DateTime

答案 1 :(得分:0)

也许你可以试试这个?

        if (Convert.ToDateTime(ds.Tables[0].Rows[0]["StartDate"].ToString("yyyyMMdd HH:mm:ss")).Date > Convert.ToDateTime(ds.Tables[0].Rows[0]["OriginalStartDate"].ToString("yyyyMMdd HH:mm:ss")).Date) 
        {
                ...do stuff...
        }