2009-07-13 7 views
0

Ich habe Probleme mit einem MS SQL 2005 Express-Problem. Eine Abfrage wie die folgende funktioniert einwandfrei, wenn die Windows-Ländereinstellungen (Systemsteuerung) auf Englisch (USA) eingestellt sind, aber sie schlägt fehl, wenn sie auf Italienisch (und möglicherweise andere Sprachen) eingestellt ist.SQL Server 2005 Express kann das Datetime-Feld nicht aktualisieren, wenn Windows auf Italienisch eingestellt ist

UPDATE MyTable SET StartDate='2009-07-14 12:05:30' WHERE ID=7 

Ich habe auch versucht, viele verschiedene Datum-Zeit-Formate wie ISO 8601:

yyyy-MM-ddTHH:mm:ss 

(siehe auch: http://www.karaszi.com/SQLServer/info_datetime.asp)

Keines dieser Formate arbeiten mit Ausnahme yyyyMMdd, aber dann habe ich Verliere die Zeit, die nicht akzeptabel ist.

auch die Ausführung dieser Abfrage macht zunächst keinen Unterschied:

SET LANGUAGE us_english 

PS: Ich habe die Abfrage von einem .NET-Programm ausführen, aber SQL Server Management Studio das gleiche Ergebnis: es kann nicht die Zeichenfolge in eine Daten umwandeln -Zeit. Sobald die Einstellungen wieder in US-Englisch geändert werden, funktioniert es wieder.

Wie kann ich diese Abfrage mit anderen Spracheinstellungen arbeiten lassen?

Antwort

2

Sie sollten regionsunabhängige Daten verwenden. In SQL Server, können Sie dies tun:

UPDATE MyTable SET StartDate={ts '2009-07-14 12:05:30'} WHERE ID=7 

Von Code, es noch besser ist, benannte Parameter zu verwenden und ein Datetime-Objekt als Parameter übergeben.

+0

Danke das funktioniert! – Roy

1

Haben Sie versucht, yyyymmdd hh: mm: ss Format?

UPDATE MyTable SET StartDate='20090714 12:05:30' WHERE ID=7 
+0

Tut mir leid, es hat nicht funktioniert, aber ich denke jetzt, es war, weil VB.net das ":" durch "." Ersetzt hat. Keine Ahnung warum. – Roy

0

Nach einigen Stunden des Versuchs fand ich die Lösung. Das ISO 8601-Format funktioniert perfekt in MS SQL, aber bei der Formatierung des Datums in VB.net ist etwas schief gelaufen.

Zuerst habe ich das folgende Formatbezeichner:

Dim datestring As String = aDate.ToString ("yyyy-MM-TTThh: mm: ss")

jedoch irgendwie das Ergebnis ist so etwas wie " 2009-07-14T12.05.30 "statt" 2009-07-14T12: 05: 30 ", also Punkte statt": "!

Wenn

Dim datestring As String = aDate.ToString ("s") angewendet

Das richtige Format verwendet: "2009-07-14T12: 05: 30".