ASP.NET передает несовместимый формат даты и времени в SQL Server - PullRequest
1 голос
/ 15 августа 2011

Я знаю, что это старый вопрос, но я не совсем новичок в этом, и я не нашел ответа, который мне до сих пор помогает!

У меня есть сайт ASP.NET, который отображает данные из базы данных SQL Server 2005. В верхней части страницы находятся поля «Дата от» и «Дата до», которые используются для фильтрации данных, показанных ниже.

Данные отображаются с использованием SqlDataSource, и две даты передаются в качестве параметров в хранимую процедуру. В текстовых полях отображаются даты и принимаются вводные данные в формате даты Великобритании (дд / мм / гггг), и все работает нормально.

Теперь я добавил новую страницу с точно такой же настройкой, отображающую немного другие данные. В бэкэнде я создал новую хранимую процедуру, скопировав и вставив исходную процедуру, она практически идентична. И все же на этой странице я получаю ошибки с датами, потому что они читаются как MM / dd / yyyy, что означает, что сегодняшняя дата, например, 15 августа 2011 г., передана как 15/08/2011 и недействительна дата.

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

Ответы [ 3 ]

2 голосов
/ 15 августа 2011
  • Текстовые поля представляют собой строки, которые находятся в локальной ветке, заданной в браузере (langauges).

  • Сначала преобразуйте их в объект DateTime, используя локальное преобразование, а затем запишите объект dateTime на сервер. НИКОГДА (!) Не работайте со строками на сервере SQL, если только вы не отформатируете их в независимой от ISO форме (2011-08-17 23:52:11).

Но в общем случае ASp.NET будет показывать даты, время и цифры в локальном языке браузера. Либо выключи это, либо разберись с этим. Это приятно для пользователя. Итак, проверьте локали - пользователь, процесс сервера. Какова текущая локаль потока?

0 голосов
/ 17 августа 2011

Я открыл новый вопрос по этому поводу, как только сузил проблему до отчета RDLC. На него ответили, и он здесь .

0 голосов
/ 15 августа 2011

Вам необходимо использовать преобразование SQL в хранимой процедуре, например:

convert(varchar, @yourdateParameter, 103) for format dd/mm/yyyy

или

convert(varchar, @yourdateParameter, 101) for format mm/dd/yyyy 

Надеюсь, это поможет.

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