SQL Server 2005 Express не может обновить поле даты и времени, если в Windows установлено итальянское - PullRequest
0 голосов
/ 13 июля 2009

Я борюсь с проблемой MS SQL 2005 Express. Запрос, подобный приведенному ниже, отлично работает, когда для параметра «Региональные параметры Windows» (панель управления) задано значение «Английский (США)», но он не работает, если задан «Итальянский» (и, возможно, другие языки).

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

Я пробовал также много разных форматов даты и времени, таких как ISO 8601:

yyyy-MM-ddTHH:mm:ss

(см. Также: http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes)

Ни один из этих форматов не работает, кроме yyyyMMdd, но тогда я теряю время, которое не приемлемо.

Кроме того, выполнение этого запроса первым не имеет значения:

SET LANGUAGE us_english

PS: я выполняю запрос из программы .Net, но SQL Server Management Studio дает тот же результат: он не может преобразовать строку во время данных. Как только настройки вернутся на американский английский, они снова будут работать.

Как мне заставить этот запрос работать с другими настройками языка?

Ответы [ 3 ]

2 голосов
/ 13 июля 2009

Вы должны использовать независимые от региона даты. В SQL Server вы можете сделать это:

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

Из кода еще лучше использовать именованные параметры и передавать объект DateTime в качестве параметра.

1 голос
/ 13 июля 2009

Вы пробовали ггггммдд формат чч: мм: сс?

UPDATE MyTable SET StartDate='20090714 12:05:30' WHERE ID=7
0 голосов
/ 13 июля 2009

После нескольких часов попыток я нашел решение. Формат ISO 8601 отлично работает в MS SQL, но что-то пошло не так при форматировании даты в VB.net.

Сначала я использовал следующий спецификатор формата:

Dim dateString As String = aDate.ToString ("гггг-мм-ддтчч: мм: сс")

Однако, как-то получается что-то вроде «2009-07-14T12.05.30» вместо «2009-07-14T12: 05: 30», поэтому точки вместо «:»!

При использовании

Dim dateString As String = aDate.ToString ("s")

Применяется правильный формат: «2009-07-14T12: 05: 30».

...