日期格式和区域设置

时间:2010-03-01 13:06:12

标签: asp.net sql sql-server datetime regional

我正在使用MS SQL 2000,VS2008,MVC和C#。

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

当我尝试插入或更新日期为例如。 2009年3月28日,我收到以下错误:

插入: 将数据类型nvarchar转换为datetime

时出错

更新: 将char数据类型转换为datetime数据类型会导致超出范围的datetime值

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

为什么以美国格式保存日期?
我在这里缺少什么?

谢谢!
斯泰恩

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

SQL实例具有自己的语言环境设置,默认情况下为“us_english”

现在,如果您使用varchar而不是本机日期时间来存储数据值,通常会发生这种情况。如果您的代码/表使用datetime列并将参数定义为datetime,那么您将不会收到错误。

答案 2 :(得分:1)

我也有这个问题,它与SQL服务器的日期格式有关,

我通过格式化要插入的日期字符串来解决它

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

希望有所帮助

答案 3 :(得分:1)

以上所有建议都是正确的,但我发现如果您将日期时间添加为字符串/ varchar,最安全的方式是'YYYY-MM-DD'

所以,例如。

  Update MyTable
  Set MyDate = '2010-03-01'