目前我有一个带日期和时间的字符串。当我显示字符串时,它看起来像:
2015-06-16 09:17:28 PM
但是当我试图将它放入数据库时,它会告诉我:
附加信息:SqlDateTime溢出。必须在17/1年1月1日之间 上午12:00:00和12/31/9999 11:59:59 PM。
我要转换字符串。所以现在有另外一种方式!
正确的方法是什么?显然,数据库中的值是datetime。
这是我的代码(我实际上将它放在一起,来自多个类):
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);
我已经google了很多....但没有任何作用。
由于
答案 0 :(得分:1)
你不应该那样使用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
答案 1 :(得分:0)
两者
DateTime.Parse("2015-06-16 09:17:28 PM");
和
Convert.ToDateTime(date);
将返回相同的DateTime值。
我会尝试专注于查询。
请注意,您可能正在从C#传递一个值,该值解析了DateTime(1/1/0001 12:00:00 AM)的最小值,这超出了SQL Server上DateTime值的范围。