我正在提取一个日期格式的字符串(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个小时。值得庆幸的是,我对上述代码得到了解决。
注意:
- 我在Visual Studio中使用MVC使用SQL Server开发Web应用程序
- ccccbentities是我正在使用的实体的名称
- 这个答案是我从User326608上获得的答案,我只是无法投票,所以我决定在这里发表评论,以强调它解决了我的问题
- 另外,即使我也将SPS保存到DB时也使用了SP,我也不必遵循他关于更改SP的建议,如果您仍然遇到问题,请遵循user326608有关修改SP代码 的说明。
您可以这样做
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的转换代码在这里。