2017-08-24 2 views
0

Wir sind vor kurzem auf einen neuen Webserver umgezogen. Der alte Webserver hat Windows Server 2008 R2, der neue Webserver Windows Server 2012 R2. Die Datenbanktabellen und Daten wurden verschoben, alle Spalten bleiben gleich.Datum Zeit Problem auf neuen Webserver

Das Problem tritt beim Testen der Anmeldeseite der Website auf. Es funktioniert perfekt auf dem alten Web-Server, jedoch auf den neuen Server wir diesen Fehler:

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

Es ist offensichtlich ein Problem mit der neuen Version von SQL Server, da der Code gleich ist:

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() 

Wir haben verschiedene Optionen (Einstellung Datumsformat auf SQL Server sowie den Web-Server versuchen jedoch, dass es nicht beheben läßt - Pls helfen, dank

+0

haben Sie versucht, DateTime.Now.ToString ("JJJJ/MM/TT HH: mm") –

+0

die Region Einstellungen unterscheiden sich zwischen dem alten und dem neuen Server. Die beste Option ist die Umstellung auf das ISO-8601-Format (JJJJMMTT). – NoviceProgrammer

Antwort

2

es ist nicht ein Problem mit dem Server, um die Tatsache, dass es didn. Wenn Sie nicht auf dem anderen Server erscheinen, bedeutet das nur, dass Sie Glück hatten ER erstellt eine String, um Daten darzustellen, die eigentlich kein Text sind, es sei denn, es dient der Anzeige oder Serialisierung. In diesem Fall starten Sie mit einem .NET DateTime und Sie möchten es an eine SQL Server datetime Spalte senden. Es sollte nirgendwo irgendwo Text dazwischen sein. Tun Sie dies nicht:

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

Das ist Ihr Problem genau dort. Wenn Sie die DateTime auf die nächste Minute abrunden wollen, dann tun:

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

Sie dann, dass binäre DateTime Wert als Parameterwert verwenden. Keine Konvertierung bedeutet keine Konvertierungsprobleme.

+0

Ich sollte wahrscheinlich darauf hinweisen, dass es tatsächlich funktioniert hätte, wenn Sie dies getan hätten: Dim strStartTime = DateTime.Now.ToString (yyyy-MM-dd HH: mm ")". Das ist das Format, das Sie verwenden sollten, wenn Sie beispielsweise ein Datumsliteral in SSMS schreiben. Sie haben wahrscheinlich mit einem Server zu tun gehabt, indem Sie das Tag-zuerst-Format als Standard-Datumsformat und das andere als Monat-zuerst-Format verwendet haben. Um es klar zu sagen, das ist jedoch kein Problem mit dem Server. Beide Server funktionieren einwandfrei, wenn Sie Code richtig schreiben. – jmcilhinney