sql server-在C#中使用Convert.ToDateTime转换sql日期值失败

本文关键字:sql ToDateTime 转换 日期 失败 Convert server- | 更新日期: 2023-09-27 17:59:45

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

将varchar数据类型转换为datetime数据类型导致值超出范围。

我所做的是将一组数据从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() 时,列中转换为字符串的数据失败了

然而,令人困惑的问题是,此代码已在其他服务器上运行,并且此问题是孤立的。所以我知道它可能是服务器独有的,但我不知道该去哪里找。

不幸的是,改变任何地区设置等都不是一种选择,所以我正在努力找到解决办法!

感谢您的帮助!

sql server-在C#中使用Convert.ToDateTime转换sql日期值失败

基本上,您不应该首先将值转换为字符串并返回。尽可能避免字符串转换,除非这是你尝试做的事情的重要部分。在你的情况下,你真的对DateTime值感兴趣。它们在数据库中是DateTime,而您希望它们在代码中作为DateTime值,那么为什么要引入字符串呢?

你应该能够使用:

DataRow row = ds.Tables[0].Rows[0];
DateTime startDate = (DateTime) row["StartDate"];
DateTime originalStartDate = (DateTime) row["OriginalStartDate"];
if (startDate.Date > originalStartDate.Date)
{
    ...
}

也许你可以试试这个?

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