2011-07-28 5 views
2

C# код считывает данные из базы данных через динамические запросы.Проблема с datetime SQL Server?

Select ID, TransDate from Table_01 

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

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

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

The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value

Если я изменить его в ММ/дд/гггг или YYyyMmDd то он работает.

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

Каков наилучший способ справиться с этим?

ответ

0

Попробуйте установить DateFormat и используя роли:

Set DateFormat DMY 
GO 
INSERT INTO Table_02(ID,ClosingDate) 
Select 1, Cast('27/07/2011 12:00:00 AM' As DateTime) 
+0

SQL Server тоже не нравится. Вот ошибка: преобразование типа данных символа в тип данных datetime привело к значению даты и времени вне диапазона. – User13839404

+0

@ User13839404 - Действительно? Я попробовал это на своем локальном экземпляре 2005 года, и он работает. – Thomas

+0

Сервер Sql сидит на другой машине, где системный формат даты и времени - yyyy-MM-dd. Где приложение работает, формат datetime - dd/MM/yyyy. Я не знаю, имеет ли это значение? – User13839404

2

Стиль конвертирования 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)) 

Вы можете найти документацию для стилей here.

+0

Или измените значение своей вставки на ГГГГ-ММ-ДД, которое считается «каноническим» в большинстве систем и культур. – GalacticCowboy

+0

@Joe, Привет, но проблема в том, что этот формат даты может быть любым в зависимости от настроек даты компьютера ... – User13839404

1

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

+0

Справа. Я постепенно меняю его. его большая система. Но теперь это ограничение времени. – User13839404

0

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

Смежные вопросы