【问题标题】:Date Time format problem in sql serversql server中的日期时间格式问题
【发布时间】:2010-02-01 00:18:04
【问题描述】:

我在 asp.net 中有一个应用程序,直到最近我在控制面板的区域和语言设置中更改了日期时间格式时,它才能正常工作。

日期时间格式是我安装 XP 时的默认格式。我在安装 XP 时选择了印度标准时间。

我将日期时间格式更改为 dd/MM/yyyy HH:mm:ss。每当我尝试将任何日期时间插入表中时,我的应用程序就会开始引发异常。

我得到的例外是:

System.Data.SqlClient.SqlException:将数据类型 varchar 转换为 datetime 时出错。

请帮帮我

【问题讨论】:

  • 也许您可以向我们展示一个导致抛出异常的代码示例?我怀疑您可能没有使用参数并使用某种形式的字符串连接?
  • 为什么这个问题被赞成。不清楚其中没有任何代码,否决投票会更合适。请花点时间写下您的问题,按照上面评论中的要求粘贴一些代码。

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


【解决方案1】:

如果不查看正在抛出的代码,很难确切地知道发生了什么。但是,如果您需要与 SQL Server 通信日期,通常最好使用ISO 8601 表示标准,因为它是明确的且独立于区域设置的。最重要的格式是:

  • yyyy-MM-dd 日期
  • hh:mm:ss 时间
  • yyyy-MM-dd hh:mm:ss 日期/时间

我的猜测是您有一个查询在当前语言环境中发送超过日期,而服务器上的语言环境不匹配。

编辑:为了记录,这并不排除 Rob 在他的回答中所说的任何内容,即尽量避免传递硬编码的日期或硬编码的 SQL。这仅适用于您出于某种原因需要

编辑 2:我被告知 yyyy-MM-dd 格式对于某些语言环境仍然可能是错误的;因此,如果您需要传入一个文字日期字符串,而不是这个,您应该使用yyyyMMdd

【讨论】:

  • 实际上,YYYYMMDD 在 SQL Server 中比 YYYY-MM-DD 安全得多。原因:YYYY-MM-DD 在某些情况下实际上被解释为 YYYY-DD-MM,比如使用 SET LANGUAGE FRENCH 时。我完全同意数据应该用适当的数据类型参数化。但是这种误解不仅在从客户端代码传递时是一个问题,甚至在直接在 T-SQL 中处理字符串文字时也是一个问题,所以请记住,您不能盲目地相信 YYYY-MM-DD 的文字日期值。
  • @Aaron:有趣,我很惊讶某些语言环境实际上破坏了 ISO 标准!我必须牢记这一点以备不时之需,我会相应地编辑帖子。
【解决方案2】:

根据我的评论,您可能需要确保您使用的代码的行为方式与下面的代码类似(即使用参数而不是字符串连接)

        var myConnectionString = "connection string goes here";
        var myDateValue = DateTime.Now;
        using (var connection = new SqlConnection(myConnectionString))
        {
            using (var command = new SqlCommand("SELECT COUNT(1) FROM dbo.table WHERE datecolumn = @datevalue", connection))
            {
                var dateValueParameter = new SqlParameter("@datevalue", myDateValue);
                command.Parameters.Add(dateValueParameter);

                var result = Convert.ToInt32(command.ExecuteScalar());
            }
        }

【讨论】:

    【解决方案3】:

    尝试将“Current Language=YourLanguage”添加到 SQL 服务器连接字符串。其中 YourLanguage 是您希望 SQL 在读取日期等值时使用的语言。

    您可以通过执行以下 SQL 命令查看 SQL 支持的所有语言的列表:

    select * from master.dbo.syslanguages
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-27
      • 1970-01-01
      • 1970-01-01
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      相关资源
      最近更新 更多