转换日期时间会引发 SqlDateTime 溢出

本文关键字:SqlDateTime 溢出 日期 时间 转换 | 更新日期: 2023-09-27 17:56:41

目前我有一个带有日期和时间的字符串。当我显示字符串时,它看起来像:

2015-06-16 09:17:28 下午

但是当我尝试将其放入数据库时,它告诉我:

其他信息:SqlDateTime 溢出。必须介于 1/1/1753 之间 上午 12:00:00 和 9999-12-31 下午 11:59:59。

我必须转换字符串。所以现在有其他方法!

正确的方法是什么?显然,数据库中的值是日期时间。

这是我的代码(我已经把它放在一起,实际上它来自多个类):

    string time = date + " " + txtTime.Text;
    DateTime temp = Convert.ToDateTime(time);
    String query ="insert into reserveringen (reserveringId,klantId,medewerkerId,aantalPersonen,begintijd,eindtijd)values(@reserveringId,@klantId,@medewerkerId,@aantalPersonen,@begintijd,@eindtijd)";
    SqlCommand comm = sqlCrud.returnSqlCommand(query);
    comm.Parameters.AddWithValue("begintijd",temp);

我已经用谷歌搜索了很多....但没有任何效果。

谢谢

转换日期时间会引发 SqlDateTime 溢出

你不应该使用这样的Convert.ToDateTime。您应该使用 DateTime.ParseDateTime.ParseExact

DateTime temp = DateTime.ParseExact(time, "yyyy-MM-dd hh:mm:ss tt", CultureInfo.InvariantCulture);

既然DateTime.Parse(temp)为你工作,你可以就这样离开。

编辑:

在这种情况下,两种方法之间的区别非常重要

Convert.ToDateTime(s)

此方法将在内部使用以下参数调用DateTime.Parse

DateTime.Parse(s, DateTimeFormatInfo.CurrentInfo, DateTimeStyles.None);

现在,DateTime.Parse(s)做了一些不同的事情:

DateTime.Parse(s, DateTimeFormatInfo.CurrentInfo, DateTimeStyles.AllowWhiteSpaces);

区别在于DateTimeStyles标志。此标志完全更改输出。Convert.ToDateTime(s)可能返回一个DateTime.MinValue对象,这就是它在遇到null字符串时所做的。(我只能猜测而不花更多时间在研究上,但这个结果是有道理的,因为DateTime.MinValue1/1/0001 12:00:00 AM,这超出了 SQL 预期的范围。

引用:

http://bytes.com/topic/c-sharp/answers/482419-convert-todatetime-vs-system-datetime-parse

https://msdn.microsoft.com/en-us/library/system.datetime.parse(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/system.datetime.minvalue(v=vs.110).aspx

两者

DateTime.Parse("2015-06-16 09:17:28 PM");

Convert.ToDateTime(date);

将返回相同的日期时间值。

我会尝试专注于查询。

请注意,您可能正在从 C# 传递一个值,该值解析为 DateTime (1/1/0001 12:00:00 AM) 的最小值,该值超出了 SQL Server 上 DateTime 值的范围。