错误:SqlDateTime溢出。必须在1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之间

时间:2014-12-19 10:55:28

标签: c# sql datetime

首先,我知道其他人已发布此错误,但我相信我的问题与其他人不同。我有一个方法,我用来将字符串转换为日期时间,我试图使用DateTime.TryParse方法,但我只是在使用DateTime.TryParse方法时得到上述错误,即使两个结果都是相同。我很困惑为什么会这样。

My method:

public static DateTime parseDateTime(string data)
    {
        try
        {
            return Convert.ToDateTime(data.Replace('"', ' ').Trim());
        }
        catch (FormatException format)
        {
            Console.WriteLine(format.Message);
            Console.WriteLine(data);
        }
        catch (OverflowException overflow)
        {
            Console.WriteLine(overflow.Message);
            Console.WriteLine(data);
        }

        return DateTime.MaxValue;
    }

返回: {11/26/2014 12:00:00 AM}

My new method:

DateTime date = new DateTime();
 using (DailyAmexDataTableAdapter amexAdapter = new DailyAmexDataTableAdapter())
{
DateTime.TryParse(lineArray[0], out date);
amexAdapter.Insert(symbol, open, high, low, close, volume, adjClose, date); // error here
}

返回: {12/26/2014 12:00:00 AM}

1 个答案:

答案 0 :(得分:1)

您正在使用

DateTime.TryParse(lineArray[0], out date);

如果lineArray[0]未被识别为有效日期,则DateTime.TryParse将返回false并将date设置为DateTime.MinValue。这不是sql datedatetime列的有效值。

你正在"初始化" date变量(DateTime date = new DateTime();)并不重要:tryParse忽略该值并分配一个新值。您可以删除=new DateTime()

如果它有效,那么new DateTime()仍然会以DateTime.MinValue结束。

因此,您需要测试TryParse的结果,如果它是假的,则需要做其他事情。