目前我有一个日期和时间的字符串。当我显示字符串时,它看起来如下:
2015-06-16 09:17:28
但当我试图把它放到数据库里时,它告诉我:
附加信息: SqlDateTime溢出。必须在1/1/1753 12:00上午12:00至12/31/9999 11:59:59下午
我得把绳子转换一下。所以现在有别的办法了!
怎么做才是对的?显然,数据库中的值是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);我已经搜索了很多..。但什么都不管用。
谢谢
发布于 2015-06-16 19:53:42
您不应该那样使用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
发布于 2015-06-16 19:52:09
两者都有
DateTime.Parse("2015-06-16 09:17:28 PM");和
Convert.ToDateTime(date);将返回相同的DateTime值。
我会把重点放在查询上。
请注意,您可能从C#传递一个值,该值以DateTime (1/1/0001 12:00:00 AM)的最小值解析,该值超出了Server上DateTime值的范围。
https://stackoverflow.com/questions/30876495
复制相似问题