我们最近搬到了新的网络服务器。旧的Web服务器具有Windows Server 2008 R2,新的Web服务器具有Windows Server 2012 R2。数据库表和数据已移过,所有列保持不变。
问题在于测试网站的登录页面。它在旧的Web服务器上运行良好,但在新服务器上我们收到此错误:
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服务器上设置日期格式,但是无法解决它 - 请帮忙,谢谢
答案 0 :(得分:2)
这不是服务器的问题。事实上,它并没有出现在另一台服务器上,这意味着你很幸运。除非出于显示或序列化的目的,否则切勿创建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
值作为参数值。没有转换意味着没有转换问题。