2010-03-01 152 views
4

我正在使用MS SQL 2000,VS2008,MVC和C#。日期格式和区域设置

我试图插入并使用存储过程更新一些数据。 某些列是datetime类型的。 服务器和客户端的区域设置设置为荷兰语(比利时) 这意味着默认日期格式为dd/mm/yyyy。

当我尝试插入或更新与例如日期。 28/03/2009,我收到以下错误:

插入: 错误的数据类型为nvarchar转换为datetime

更新: 一个char数据类型到datetime数据类型的转换导致的失-range datetime value

当我尝试使用01/03/2009这样的日期时,我没有收到任何错误,但日期保存为美国日期格式的03/01/2009。 这是区域设置问题的典型行为。但两者都被设定为荷兰(比利时)。

它为什么以美国格式保存日期?
我在这里错过了什么?

谢谢!
Stijn

回答

3

您应该使用DateTime对象而不是字符串将数据插入到数据库中。您的客户端代码应该使用客户端的区域设置将客户端的日期条目转换为DateTime对象,然后将DateTime结构添加到最终发送到数据库中的参数中。

+0

感谢大卫做的伎俩! – 2010-03-01 13:34:41

1

SQL实例都有它自己的区域设置,默认为“美国英语”

现在,这个,如果你使用推VARCHAR而非本地日期时间来存储数据值通常发生。如果您的代码/表使用日期时间列,并且将参数定义为日期时间,那么您将不会收到错误。

1

我有这个问题太,它是与你的SQL服务器的日期格式,

我解决它通过格式化的日期要插入的字符串,像这样

DateTime.Now.ToString("MM/dd/yyyy HH:mm") 

希望帮助

1

所有上述建议是正确的,但我觉得,如果你/添加日期时间为一个字符串VARCHAR最安全的方法是在格式“YYYY-MM-DD”

例如。

Update MyTable 
    Set MyDate = '2010-03-01' 
相关问题