目前我有一个带有日期和时间的字符串。当我显示字符串时,它看起来像:
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);
我已经用谷歌搜索了很多....但没有任何效果。
谢谢
你不应该使用这样的Convert.ToDateTime
。您应该使用 DateTime.Parse
或 DateTime.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.MinValue
是1/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 值的范围。