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

Casting SQL Date Value using Convert.ToDateTime in C# is failing

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

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

我所做的是将一组数据从 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()

时失败,转换为字符串

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

不幸的是,更改任何区域设置等都不是一种选择,所以我正在努力寻找解决方法!

感谢任何帮助!

也许你可以试试这个?

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

基本上,您不应该首先将值转换为字符串并返回。尽可能避免字符串转换,除非这是您尝试执行的操作的重要组成部分。在您的情况下,您真的对 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)
{
    ...
}