-2

我正在提取一个日期格式的字符串(yyyy-MM-dd),然后将其转换为 aDateTime并使用存储过程将其插入数据库中。但我不断得到

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.

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

但是在使用调试器时,我可以看到返回值实际上是一个格式化的yyyy-MM-dd HH:mm:ssDateTime。

这是代码外观的示例

string expirationDate = GetDate();
DateTime date = DateTime.ParseExact(expirationDate, "yyyy-MM-dd", null);

ExecuteMyStoredProc(date);
4

4 回答 4

1
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. 另外,即使我在保存到数据库时也使用了 SP,我不必遵循他关于更改 SP 的建议,如果您仍然遇到问题,请按照 user326608 说明修改您的 SP 代码
于 2017-06-05T06:27:25.880 回答
0

Just try like this

    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);
于 2014-01-28T09:18:49.470 回答
0

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

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 的转换代码在这里

于 2014-01-28T09:41:15.253 回答
0

你可以这样做

string expirationDate = GetDate();
string date = Convert.DateTime(expirationDate).ToString("yyyy-MM-dd");
于 2014-01-28T09:29:30.223 回答