Формат сравнения даты в хранимой процедуре - PullRequest
0 голосов
/ 01 ноября 2010

У меня есть база данных sql server 2005 и хранимая процедура, которая принимает две даты и выполняет некоторые сравнения данных @start_date_from и @start_date_to, оба из которых имеют тип DATETIME.

Мы используем LINQ для вызова хранимых процедур из нашего кода, а перетаскивание хранимой процедуры на поверхность LINQ генерирует вызов метода, который принимает значения даты и времени, допускающие значение NULL.

Проблема, с которой я сталкиваюсь, заключается в том, что наши даты из пользовательского интерфейса вводятся как dd / MM / yyyy (мы в Австралии) и анализируются как C # DateTime.

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

Я пытался использовать SET DATEFORMAT dmy в процедуре, но, похоже, это никак не отразилось, я предполагаю, что для вступления в силу ему нужно GO или что-то еще.

Я подумывал, может быть, однажды попробовал какое-нибудь классное форматирование / преобразование / приведение в сохраненный процесс, но это выглядело как последнее средство.

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

Внутри самого процесса даты используются с ключевым словом BETWEEN (если это имеет какое-либо значение).

Так с какими другими вариантами (или с какими из перечисленных мною) я должен пойти?

1 Ответ

1 голос
/ 01 ноября 2010

Я полагаю, что пользовательский ввод неявно преобразуется в DateTime? Я бы сказал, что вам нужно проанализировать ввод пользователя в действительный DateTime перед вызовом SP.

DateTime.Parse("11/12/1981", new CultureInfo("en-US"));

Если культура отличается у пользователей, вы можете использовать культуру текущего потока:

DateTime.Parse("11/12/1981", System.Threading.Thread.CurrentThread.CurrentUICulture);
...