SQL Server дата-проблема? - PullRequest
2 голосов
/ 28 июля 2011

C # код читает данные из базы данных через динамические запросы.

Select ID, TransDate from Table_01

Бизнес-логика обрабатывает данные и, наконец, снова помещает дату в базу данных.

INSERT INTO Table_02
( ID,ClosingDate) VALUES
( 1,Convert(DateTime, '27/07/2011 12:00:00 AM',120))

Поскольку формат даты, который я вставляю, равен дд / мм / гггг. Sql Server не нравится и .net выдает эту ошибку: -

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

Если я изменю его на MM / dd / yyyy или yyyyMMdd, то это сработает.

Но системные региональные настройки даты и времени могут быть изменены любым пользователем в любое время, поэтому я ищу какое-то конкретное решение.

Как лучше всего с этим справиться?

Ответы [ 4 ]

2 голосов
/ 28 июля 2011

Стиль разговора 120: yyyy-mm-dd hh:mi:ss(24h).Попробуйте вместо этого использовать 103 (dd/mm/yyyy).

INSERT INTO Table_02
( ID,ClosingDate) VALUES
( 1,Convert(DateTime, '27/07/2011 12:00:00 AM',103))

Документацию по стилям можно найти здесь .

1 голос
/ 28 июля 2011

IMO лучшим способом было бы использовать параметризованный запрос - тогда драйвер / сервер заботится о преобразовании данных в правильный формат.

0 голосов
/ 28 июля 2011

Придерживайтесь yyyyMMdd, оно всегда будет работать независимо от региональных настроек и настроек формата даты.Остерегайтесь yyyy-MM-dd, оно не будет работать, если формат даты - DMY.http://www.sommarskog.se/wishlist.html#YYYYMMDD

0 голосов
/ 28 июля 2011

Попробуйте установить формат даты и использовать Cast:

Set DateFormat DMY
GO
INSERT INTO Table_02( ID,ClosingDate) 
Select 1, Cast('27/07/2011 12:00:00 AM' As DateTime)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...