2016-04-08 2 views
0

Это произошло сегодня, и это самая странная вещь.Странное поведение с SQL-запросом

Я использую Entity Framework + LINQ для вставки значений DB. Существует столбец datetime, и он работает до 2016/04/01.

Сегодня, когда я вставить несколько строк и попытался выбрать их:

Where BulletingDate = Convert(DateTime, '2016-03-01 00:00:00') 

Это работает, но почему-то теперь, когда я пытался вставить значения с этим:

a.BulletingDate = DateTime.Parse(txtBulletinDate.Text); 
entities.Auctions.Add(a); 
entities.SaveChanges(); 

Он добавляет DateTime как: 2016-01-04 00: 00: 00,000

Но Bulletin Дата Текст: 2016-04-01 00:00:00

Я не могу понять.

Пожалуйста, помогите.

+2

Если у вас есть значение в определенном формате, я предлагаю вам явно использовать этот формат при использовании 'DateTime.Pars eExact' ... –

+2

Вероятно, сервер и приложение используют разные локали. Как утверждает Джон, вы всегда должны быть конкретными с датами, особенно в распределенном приложении. –

ответ

1

Форматы дат, как известно, хрупкие; очень просто для запросов, которые, по вашему мнению, запускают YYYY-MM-DD, чтобы внезапно начать делать YYYY-DD-MM или аналогичные по сравнению с чем-то меньшим, как другой пользователь, подключившийся к терминалу.

Не следует полагаться на даты, переданные в базы данных, поскольку строки анализируются точно так, как вы ожидаете. Передайте их в качестве объектов даты, и вы получите гораздо лучшие результаты.

0

datetime type in SQL Server использует дробные секунды. Это конец .000 на конце.

Если вы можете, я предлагаю переключиться на datetime2 in SQL Server 2008 and up, у которого есть опционально дробные секунды. Если вам не нужно отслеживать доли секунды, вы можете использовать datetime2 (0). Он отлично работает с C# DateTime.

0

Bouild ваш объект DateTime как этот

DateTime х = новый DateTime (2016,01,04); // год месяц день

поэтому вы не имеете проблем при переходе его в рамках сущности

также, если ваша строка находится в этом формате «20140104 00:00:00», вы тоже должны быть в безопасности (по крайней мере, MSSQL не имеет проблем с этим форматом, не уверен, что C# тоже круто)

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