3

那里。我正在开发一个简单的接口来从 SQLServer 获取数据并使用该函数DateTime.ToString(String)

实际代码是DP.Value.ToString("yyyy-MM-dd HH:mm:00"),其中 DP 是 DateTimePicker 控件。

当我在自己的笔记本电脑上测试时,一切正常。但是当我将编译后的代码移到另一台电脑上时,结果就不同了。例如:它从2013-03-27 22:02to传递2013-03-27 22.02,替换 '.' 用':'在一小时内。但这足以让我的应用程序崩溃,因为 SQLServer 会生成无效日期。

罪魁祸首可能是什么?两台电脑都安装了 SQLServer 2008 R2(和相同的排序规则)和 .NET Framework 4.0 客户端配置文件。我看到的一个区别是我的 SQLServer 有英语(美国)语言属性,而另一个有意大利语设置,但我应该用格式字符串克服它......

4

2 回答 2

3

您没有指定文化,因此正在使用当前文化。在另一个系统上,“。” 用于时间说明符,而不是“:”。

但是,您可以明确指定文化,以避免这种情况:

var str = DP.Value.ToString("yyyy-MM-dd HH:mm:00", CultureInfo.InvariantCulture);

话虽如此,使用参数化查询并将值保留为 aDateTime比将日期作为字符串传递更好的习惯。

于 2013-03-27T21:16:20.040 回答
2

罪魁祸首可能是什么?

用户的文化设置。

一些文化使用., 一些:作为时间分隔符。

解决方案?

使用CultureInfo.InvariantCulture(或选定的CultureInfo)来确保一致性:

DP.Value.ToString("yyyy-MM-dd HH:mm:00", CultureInfo.InvariantCulture)
于 2013-03-27T21:15:51.917 回答