Дата как параметр к ХП в SQL2005Express
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Дата как параметр к ХП в SQL2005Express Expand / Collapse
Автор
Сообщение
01.02.2007 22:45
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 28.10.2007 0:53
Сообщ.: 83, Visits: 593
Есть ХП: sp_name @status=0,@dat='03.16.2005 04:01:17'
Прекрасно работала в 2000, перешел на 2005Expr - выдает:
"Ошибка при преобразовании типа данных varchar к datetime."
Вызов идет из ASP.NET(2) через cmd.CommandText="sp_name @status=0,@dat='03.16.2005 04:01:17'";dr=cmd.ExecuteReader();
Странно что это только локально не работает, на хостинге все прекрасно пашет ...

Итак: в каком формате надо вносить дату в параметр?
(дд.мм.ггггг или мм.дд.гггг или ггггг.мм.ддд или еще как ...)

Или это зависит сугубо от локали?(latin1_general или cyrillic)
Сообщ. #910309
02.02.2007 9:49
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Чтобы таких проблем не возникало надо использовать параметры - http://quickstarts.asp.net/QuickStartv20/howto/doc/adoplus/ExecuteCommand.aspx, а не передавать аргументы в строке вызова.
Сообщ. #910315
02.02.2007 12:20
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 28.10.2007 0:53
Сообщ.: 83, Visits: 593
Я в курсе про параметры, но это усложняет процесс и я привык использовать просто текстовый запрос.
У подобных процедур 20 параметров и использовать параметры будет очень непросто.
Да и вся система написана таким образом что параметры не катят - есть метод sql_exec(string sql), который просто выполняет пришедший запрос.
Притом что сайтик был написан еще под использование MSSQL7 - переписывать все это дело гиморно.
Сначала был переход на 2000, а сейчас на 2005, + с ASP переводил на ASP.NET.

Кто-нибудь знает универсальный формат даты для ХП?
Сообщ. #910321
02.02.2007 12:50
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Тогда попробуй перед вызовом процедуры добавить команду SET DATETIME dmy. То есть полный текст команды будет: cmd.CommandText="SET DATETIME dmy; EXEC sp_name @status=0,@dat='03.16.2005 04:01:17'"

Также в T-SQL существует переноимсый формат даты, но он распространяется только на дату без времени. Это строка вида 'yyyymmdd'. Для универсальной передачи даты можно использовать функцию CONVERT передавая ей нужный формат даты третьим параметром. Подробности смотри в Books online.

Сообщ. #910323
02.02.2007 14:05
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 28.10.2007 0:53
Сообщ.: 83, Visits: 593
Только не SET DATETIME dmy , а SET DATEFORMAT dmy - ничего не дает.
Поигрался с последовательностью и пришел к локальному выводу: 16.03.2005 04:01:17 - дд.мм.гггг подошло, странно ...
Посмотрел данные за прошлые года - там вообще было: гггг.мм.дд, потом мм.дд.гггг и только сейчас как на родине - дд.мм.гггг подошло.

Вывод: храните дату разделив ее на разные столбцы - отдельно год, месяц и день!
(так и сделано в половине таблиц, а вот во второй в одном поле - с ним и проблемы)
Сообщ. #910332
02.02.2007 14:30
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
lurii (02.02.2007)
Только не SET DATETIME dmy , а SET DATEFORMAT dmy - ничего не дает.

Упс. Точно. Ошибся я.

lurii (02.02.2007)
Вывод: храните дату разделив ее на разные столбцы - отдельно год, месяц и день!
(так и сделано в половине таблиц, а вот во второй в одном поле - с ним и проблемы)

Тут я с тобой не согласен. Лучше все таки хранить дату как тип "дата". Это более эффективно с точки зрения объема данных и дает возможность использования функций работы с датой (datediff, например). И опять же такой проблемы у тебя бы не было если ты передавал дату как параметр. Я помню что ты говорил про ограничения движка, просто напоминаю в чем реальный корень проблемы. Советую посмотреть исходный текст класса SqlHelper который я выкладывал в этой теме. Я им постоянно пользуюсь.

Сообщ. #910336
02.02.2007 18:16
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 28.10.2007 0:53
Сообщ.: 83, Visits: 593
Да, посмотрел я этот класс - вполне удобно.
У мня что-то похожее, причем идентично и на PHP и на .NET, но не позволяет использовать параметры - только чистый текстовый sql-запрос:

<%
if(sql_exec("select * from t_news")){
 if(!rs_full()){
  %>Нет записей<%
 }else{
  while(rs_next()){
   %><%=rs("name")%><%
  };
 };
};
%>

Отличия на PHP - вместо % идет ?

Надо будет поболее изучить SqlHelper  и взять из него полезные возможности.

(и все-таки использовать параметры у процедур неудобно IMHO)

Сообщ. #910355
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl, Alexey Spirin

Время GMT +3:00, Сейчас 4:31