![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
Artemis474 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 13.6.2008 Где: Череповец Репутация: нет Всего: нет |
Привет, всем. Может кто-нибудь помочь? нужно очень срочно
Объявлена переменная data DateTime data; Ей писваивается значение введенное в текстовое поле
При выполнении запроса
если дата введена текущая дата или которая больше, вылезает ошибка при выполнении запроса The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value. The statement has been terminated. Это какоето ограничение в SQL Server'е или тип данных не тот? |
||||
|
|||||
4ybaka |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 28.4.2007 Репутация: нет Всего: нет |
может проблема в формате даты выдаваемом по умолчанию...попробуй так:
ну если нужно будет время - добавь в шаблон. -------------------- "То,что вы понимаете - это все,что вы понимаете." Брайн Керниган |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
По-моему работать с датами вручную - последнее дело. Гораздо удобнее использовать параметры:
Это сообщение отредактировал(а) Idsa - 15.6.2008, 14:04 |
|||
|
||||
Artemis474 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 13.6.2008 Где: Череповец Репутация: нет Всего: нет |
4ybaka проблема действительно в дате. При выполненнии запроса SQL Server по своему воспринимает дату, как я понял в американском формате ММ.дд.гггг.
Решение нашел здесь, если кому-нибудь нужно будет
Idsa Про параметры не знал, спасибо. |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 7 Всего: 49 |
Artemis474, это кривое решение. Оно подразумевает, что приложение будет запущено с локалью с немецким форматом даты. Да еще и делает два бесполезных преобразования, сначала даты в строчку, потом этой строчки опять в дату. Передавай даты параметрами, как посоветовал Idsa.
|
|||
|
||||
Artemis474 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 13.6.2008 Где: Череповец Репутация: нет Всего: нет |
PashaPash, через параметры конечно удобнее, но конвертировать TextBox в формат даты, все равно нужно. И convert(datetime,'@data',104) все равно придется делать в запросе, так как SQL Server востпринимает дату как мм.дд.гггг ... получается что только при вставке. Второе преобразование заключается только в том что меняется местами день и месяц, мм.дд |
|||
|
||||
Idsa |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
PashaPash говорил не о преобразовании строки в дату, а о преобразовании даты в строку при конкатенации вот здесь:
Sql Server воспринимает дату далеко не только как мм.дд.гггг. Лучше всех о том, как именно SqlServer воспринимает дату, знает SqlClient и реализует это при приведении .NET типа DateTime к параметру базы данных типа DateTime. Так что лучше довериться алгоритму, который реализует провайдер, и использовать параметры. Кроме того, параметры обладают еще рядом замечательных свойств. В частности (раз уж мы в разделе ASP.NET, а не ADO.NET), параметры позволяют обезопасить приложение от атаки Sql Injection. Это сообщение отредактировал(а) Idsa - 17.6.2008, 00:34 |
||||
|
|||||
Artemis474 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 13.6.2008 Где: Череповец Репутация: нет Всего: нет |
Здесь convert(datetime,'" + data + "',104)"; происходит не конкатенация, а просто конверт, меняются местами месяц и число
На счет параметров согласен, SqlClient должен правильно воспринимать
Можешь привести пример, как SQL-инекция может нарушить мое приложение? |
|||
|
||||
PashaPash |
|
||||||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 7 Всего: 49 |
вот этот код:
на самом деле выглядит вот так:
Два преобразования и конкатенация. И результат зависит от локали, под которой запущен клиент. Проверь - зайди в Control Panel/Regional and language options и выставь там English/United States. Потом запусти свой код, и посмотри с каким хрустом он упадет. Причем падать будет не только на датах, а вообще на всех преобразованиях, зависящих от локали.
придет злой хакер и введет имя пользователя "administrator' OR 1=1 --". |
||||||||||
|
|||||||||||
Artemis474 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 13.6.2008 Где: Череповец Репутация: нет Всего: нет |
Если использовать параметры, ни каких конвертов делать не надо, провайдер действительно сам делает все необходимые преобразования
PashaPash, с локалью English/United States приложение не упадет Спасибо всем за ответы |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 7 Всего: 49 |
|
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Разработка под ASP.NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |