SQLDATETIME溢出异常(yyyy-mm-dd to sqldateTime)



我正在提取一个日期格式的字符串(yyyy-mm-dd),然后将其转换为 DateTime,然后使用storedprocedure将其插入数据库。但是我一直得到

System.Data.SqlTypes.SqlTypeException: SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.

我表中的列是类型date

我通过调用DateTime.ParseExact(expirationDate, "yyyy-MM-dd", null)转换字符串(例如2016-01-15),然后将该值插入参数并将其插入我的StoredProcedure并执行Proc。

但是,当使用调试器时,我可以看到返回值实际上是 yyyy-MM-dd HH:mm:ss -gormatted datetime。

这是代码看起来

的示例
string expirationDate = GetDate();
DateTime date = DateTime.ParseExact(expirationDate, "yyyy-MM-dd", null);
ExecuteMyStoredProc(date);
DateTime convertedInitDate = DateTime.ParseExact(initDate, "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
      cCCBEntities.initDate = convertedInitDate;

上面的代码是我遇到的相同问题时使用的代码,我一直在寻找大约5个小时。值得庆幸的是,我对上述代码得到了解决。

注意:

  1. 我在Visual Studio中使用MVC使用SQL Server开发Web应用程序
  2. ccccbentities是我正在使用的实体的名称
  3. 这个答案是我从User326608上获得的答案,我只是无法投票,所以我决定在这里发表评论,以强调它解决了我的问题
  4. 另外,即使我也将SPS保存到DB时也使用了SP,我也不必遵循他关于更改SP的建议,如果您仍然遇到问题,请遵循user326608有关修改SP代码
  5. 的说明。

您可以这样做

string expirationDate = GetDate();
string date = Convert.DateTime(expirationDate).ToString("yyyy-MM-dd");

只是尝试这样的尝试

    string expirationDate = DateTime.Now.ToString();
    string date = Convert.ToDateTime(expirationDate).ToString("yyyy-MM-dd");
    DateTime dt = DateTime.ParseExact(date, "yyyy-MM-dd", null);
    ExecuteMyStoredProc(dt);

首先要在代码中获得有意义的日期值:

DateTime myDate = DateTime.ParseExact(expirationDate, "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture)

但是,您仍然可能会在myDate的调试器中获得时间值,作为DateTime对象。

您的SP是下一个问题。将其更改为:

INSERT INTO MyTable (MyDate) Values (Convert(DateTime,@expiration_date,111)) --yyyy/mm/dd

SQL Server的转换代码在这里。

最新更新