2017-08-24 70 views
0

我們最近已將其移至新的Web服務器。舊的Web服務器具有Windows Server 2008 R2,新的Web服務器具有Windows Server 2012 R2。數據庫表和數據已被移動,所有列保持不變。新的Web服務器上的日期時間問題

問題是測試網站的登錄頁面時。它的工作原理非常舊的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

你試過了嗎?DateTime.Now.ToString(「yyyy/MM/dd HH:mm」) –

+0

區域設置在舊服務器和新服務器之間是不同的。最好的選擇是切換到ISO-8601格式(yyyymmdd) – NoviceProgrammer

回答

2

這不是與服務器的一個問題,這沒的事實。在另一臺服務器上顯示就意味着你很幸運,NEV ER創建一個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值作爲參數值。沒有轉換意味着沒有轉換問題。

+0

我可能應該指出,它實際上可以工作,如果你已經這樣做了:'Dim strStartTime = DateTime.Now.ToString(「yyyy-MM-dd HH:mm 「)'。例如,在SSMS中編寫日期文字時,應該使用這種格式。您可能使用第一天作爲標準日期格式而另一服務器使用月份優先方式。要明確,但這不是服務器的問題。如果您正確編寫代碼,兩臺服務器都能正常工作。 – jmcilhinney