那里。
我正在开发一个简单的接口来从SQLServer获取数据,我使用函数DateTime.ToString(String)
实际代码为DP.Value.ToString("yyyy-MM-dd HH:mm:00")
,
其中DP是DateTimePicker控件。
我在自己的笔记本电脑上测试时一切正常。但是当我在另一台PC上移动编译的代码时,结果是不同的。
例如:它从2013-03-27 22:02
传递到2013-03-27 22.02
,取代了'。'在一小时内用':'。
但这足以使我的应用程序崩溃,因为SQLServer会生成无效日期。
可能是罪魁祸首? 两台PC都安装了SQLServer 2008 R2(和相同的排序规则)和.NET Framework 4.0 Client Profile。 我看到的一个区别是我的SQLServer有英语(美国)语言属性,而另一个有意大利语设置,但我应该用格式字符串克服它......
答案 0 :(得分:3)
您没有指定文化,因此正在使用当前的文化。在另一个系统上,“。”用于时间说明符,而不是“:”。
但是,您可以specify a culture explicitly来避免这种情况:
var str = DP.Value.ToString("yyyy-MM-dd HH:mm:00", CultureInfo.InvariantCulture);
话虽这么说,使用参数化查询并将值保持为DateTime
比将日期作为字符串传递更好。
答案 1 :(得分:2)
可能是罪魁祸首?
用户的文化设置。
有些文化使用.
,有些:
用于时间分隔符。
解?
使用CultureInfo.InvariantCulture
(或选定的CultureInfo
)确保一致性:
DP.Value.ToString("yyyy-MM-dd HH:mm:00", CultureInfo.InvariantCulture)