【问题标题】:Date time issue on new web server新 Web 服务器上的日期时间问题
【发布时间】:2017-08-24 07:57:10
【问题描述】:

我们最近搬到了一个新的网络服务器。旧 Web 服务器具有 Windows Server 2008 R2,新 Web 服务器具有 Windows Server 2012 R2。数据库表和数据已移过,所有列保持不变。

问题是在测试网站的登录页面时。它在旧的网络服务器上完美运行,但是在新服务器上我们得到这个错误:

The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value. The statement has been terminated.

新版SQL Server明显有问题,因为代码是一样的:

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

Dim strConnx As String = "Data Source=Server;Initial Catalog=TEST;User Id=user;Password=password;"
        Dim cmdx As New SqlClient.SqlCommand("Insert into [LoginLog]([LogDate], [Consultant], [BU])VALUES (@LogDate, @Consultant, @BU)", New SqlClient.SqlConnection(strConnx))
        cmdx.Connection.Open()
        cmdx.Parameters.AddWithValue("@LogDate", strStartTime)
        cmdx.Parameters.AddWithValue("@Consultant", txtUserName.Text)
        cmdx.Parameters.AddWithValue("@BU", Session("BU"))
        cmdx.ExecuteScalar()
        cmdx.Connection.Close()

我们已经尝试了各种选项(在 SQL 服务器和 Web 服务器上设置日期格式,但是不能解决它 - 请协助,谢谢

【问题讨论】:

  • 你试过 DateTime.Now.ToString("yyyy/MM/dd HH:mm")
  • 新旧服务器的区域设置不同。最好的选择是切换到 ISO-8601 格式 (yyyymmdd)

标签: asp.net vb.net iis


【解决方案1】:

这不是服务器的问题。它没有出现在另一台服务器上的事实只是意味着你很幸运。永远不要创建String 来表示实际上不是文本的数据,除非它是为了显示或序列化的目的。在这种情况下,您从 .NET DateTime 开始,并且希望将其发送到 SQL Server datetime 列。两者之间不应有任何文本。不要这样做:

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

那是你的问题。如果您想将DateTime 舍入到最接近的分钟,请执行以下操作:

Dim currentTime = Date.Now
Dim startTime = currentTime.Date.AddHours(currentTime.Hours).AddMinutes(currentTime.Minutes)

然后您使用该二进制 DateTime 值作为您的参数值。没有转化意味着没有转化问题。

【讨论】:

  • 我可能应该指出,如果你这样做,它实际上可以工作:Dim strStartTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm")。例如,在 SSMS 中编写日期文字时,您应该使用这种格式。您可能与使用天优先作为标准日期格式的服务器和另一个使用月优先的服务器发生冲突。不过要清楚,这不是服务器的问题。如果您正确编写代码,两台服务器都可以正常工作。
猜你喜欢
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多