SqlDateTime溢出异常(yyyy-mm-dd到sqldatetime)

时间:2014-01-28 09:02:57

标签: c# datetime sqldatetime overflowexception

我正在提取日期格式的字符串(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

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

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

这是代码如何显示的示例

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

ExecuteMyStoredProc(date);

4 个答案:

答案 0 :(得分:1)

DateTime convertedInitDate = DateTime.ParseExact(initDate, "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
      cCCBEntities.initDate = convertedInitDate;

上面的代码是我在遇到同样的问题时使用的代码,我一直在寻找5小时。谢天谢地,上面的代码我的解决了。

说明:

  1. 我在Visual Studio中使用MVC来使用sql server
  2. 开发Web应用程序
  3. cCCCBEntities是我正在使用的实体的名称
  4. 这个答案是我从user326608得到的答案,我只是不能投票,所以我决定在这里发表评论,强调它解决了我的问题
  5. 另外,即使我在保存到数据库时也使用SP,我也不必遵循他关于更改SP的建议,如果仍然遇到问题,请按照user326608关于修改SP代码的说明进行操作

答案 1 :(得分:0)

试试这个

    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);

答案 2 :(得分:0)

你可以这样做

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

答案 3 :(得分: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的转换代码为here