Как предотвратить ошибку даты / времени вне допустимого диапазона? - PullRequest
4 голосов
/ 11 марта 2010

Я передаю специальную инструкцию вставки из приложения c # на сервер sql 2000/2005. Иногда, если машина (на которой установлен сервер sql) формат даты и времени отличается от того, что я передаю, выдает ошибку.

например. : В инструкции вставки я передаю '2010-03-10 00: 00: 00-05: 00', но региональная установка даты машины отличается. Я получаю эту ошибку: -

Преобразование типа данных char в тип данных datetime привел к значение даты / времени вне допустимого диапазона.

Могу ли я передать какой-либо общий формат даты в инструкции вставки из c #, который отлично работает с любым устройством Региональные настройки даты и времени.

Ответы [ 2 ]

5 голосов
/ 11 марта 2010

"ггггммдд" является самым безопасным, базовый формат ISO-8601. "yyyy-mm-dd" имеет проблемы, поскольку ссылка ниже упоминает

со временем: "ггггммдд чч: мм: сс"

SQL Server может быть немного нечетным при работе с датами и временем. В основном это исправлено в SQL Server 2008 с новыми форматами даты и времени. Окончательная статья Тибор Караси

Редактировать: И еще одна статья Тони Роджерсона для неверующих

2 голосов
/ 11 марта 2010

Вместо динамического построения оператора SQL-вставки в виде строк, если вы используете хранимые процедуры или параметризованные запросы, вы сможете передать значение datetime в C # в качестве объекта datetime, и не будет никакого несовпадения форматов, чтобы вызвать проблемы. *

[Исправление - это работает только в SQL 2008, см. ответ gbn для действительной строки 2000/2005]
Кроме того, я считаю, что независимо от региональных настроек серверов SQL, если вы передадите дату в виде полной строки ISO 8601 , она будет обработана правильно.

1011 * Е.Г. *

2010-03-10T14:17Z

Лично я бы порекомендовал параметризованные запросы или хранимые процедуры, поскольку они также решают множество других проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...