Дата SQL приведена между различными языками инфраструктуры - PullRequest
0 голосов
/ 20 октября 2011

У меня есть этот запрос:

SqlCommand cmdImpRN = new SqlCommand("SELECT COUNT(*) FROM copies WHERE DATEADD(dd, 0, DATEDIFF(dd, 0, DATE_TIME_COLUMN)) = @Date;", conn);
cmdImpRN.Parameters.AddWithValue("@Date", DateTime.Now.ToString("MM-dd-yyyy"));
n_i_rn = (int)cmdImpRN.ExecuteScalar();

Этот запрос предназначен для возврата числа наборов копий, чья дата DATE_TIME_COLUMN (не время) равна сегодняшней дате.В настоящее время я выполняю развертывание в различных локальных средах .NET Framework, поэтому я гарантирую, что @Date будет добавлен как «MM-dd-yyyy» и будет работать нормально, пока какой-нибудь клиент не купит и не установит SQL Server на испанском языке.Теперь приложение не работает для этого исключения, например:

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

Кажется, я могу заставить его работать так:

cmdImpRN.Parameters.Add(new SqlParameter("@Date", SqlDbType.Date){Value = DateTime.Now })

Но я не уверен, так ли это.Зачем?Потому что я не знаю, возвращает ли DateTime.Now разные значения для разных установленных языков .NET Framework, и потому что я не знаю, создаст ли этот конструктор допустимый объект Date, независимо от того, будет ли возвращение DateTime.Now в MM-dd-формат гггг или дд-мм-гггг формат.

Любой совет?Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 20 октября 2011

Ваше использование только DateTime.Now является правильным.DateTime.Now всегда возвращает правильную дату для настроенного часового пояса конечного пользователя.Что происходит, так это то, что дата отправляется на сервер в двоичном формате (который не зависит от локали), а не в виде строки, и сервер выполняет сравнение с этим двоичным форматом напрямую, избегая любых проблем форматирования даты, специфичных для локали.

1 голос
/ 20 октября 2011

Использовать DateTime.Now.Date.Это уже DateTime и формат мм / дд / гггг не будет иметь значения.А еще лучше - привыкнуть к датам и времени UTC, чтобы вам не приходилось беспокоиться о локальном времени пользователя, локальном времени сервера и о том, что у вас есть.

Свойство Date само по себе не имеет доли времени (установленодо полуночи).

http://msdn.microsoft.com/en-us/library/system.datetime.date.aspx

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