【问题标题】:date format and regional settings日期格式和区域设置
【发布时间】:2011-01-22 07:01:47
【问题描述】:

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

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

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

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

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

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

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

谢谢!
斯蒂金

【问题讨论】:

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


    【解决方案1】:

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

    例如。

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

    【讨论】:

      【解决方案2】:

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

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

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

      希望对你有帮助

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-12-23
            • 2018-07-02
            • 1970-01-01
            • 2022-01-12
            • 1970-01-01
            • 1970-01-01
            • 2021-07-01
            • 1970-01-01
            相关资源
            最近更新 更多