Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проблема с датой / 8 сообщений из 8, страница 1 из 1
18.05.2013, 17:04
    #38263368
VIT2708
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с датой
Вот пытаюсь передать в хранимую процедуру 2 параметра "дата начала" и "дата окончания" пользователь выбирает период из двох
dateTimePicker, он выбирает дату а я программно добавляю время

пример

public Statistics GetStatistic(DateTime ds, DateTime de)
{
//....
AddParameter(new DbParameter("@dateStart", DateTime.Parse(ds.ToString("d") + " 0:00:00"), SqlDbType.DateTime));
AddParameter(new DbParameter("@dateEnd", DateTime.Parse(de.ToString("d") + " 59:59:59"), SqlDbType.DateTime));
//....
}
но вываливается ошибка

DateTime, представленный строкой, не поддерживается в календаре System.Globalization.GregorianCalendar.

Давно не писал на WinForms и забыл как можна передать переметр в хранимую процедуру или где в конфигурации выставить System.Globalization.GregorianCalendar?

Спасибо.
...
Рейтинг: 0 / 0
18.05.2013, 17:08
    #38263370
VIT2708
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с датой
VIT2708,

Sorry

вопрос снимается, протупил.....
...
Рейтинг: 0 / 0
18.05.2013, 17:13
    #38263375
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с датой
> Давно не писал на WinForms и забыл как можна передать переметр в хранимую процедуру

/me думает: девичья память ?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.05.2013, 17:34
    #38263396
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с датой
VIT2708, преобразовывать дату в строку плохая идея. С датой надо всегда работать как с датой. Поэтому:
Код: c#
1.
2.
AddParameter(new DbParameter("@dateStart", ds.Date, SqlDbType.DateTime));
AddParameter(new DbParameter("@dateEnd", new DateTime(de.Year, de.Month, de.Day, 23, 59, 59), SqlDbType.DateTime));


вместо new DateTime(de.Year, de.Month, de.Day, 23, 59, 59) можно также написать:
Код: c#
1.
2.
de.Date.AddDays(1).AddSeconds(-1)
de.Date.AddSeconds(24*60*60-1)
...
Рейтинг: 0 / 0
18.05.2013, 17:52
    #38263414
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с датой
bazileVIT2708, преобразовывать дату в строку плохая идея. С датой надо всегда работать как с датой.
Дык, Ex_Soft/me думает: девичья память ?

и ЭстЪ топик VIT2708

_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.05.2013, 18:08
    #38263433
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с датой
Ex_SoftДык, .. и ЭстЪ топик VIT2708
Я заметил, но в данном случае речь идет о другом.
...
Рейтинг: 0 / 0
21.05.2013, 18:32
    #38267045
VIT2708
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с датой
bazileVIT2708, преобразовывать дату в строку плохая идея. С датой надо всегда работать как с датой. Поэтому:
Код: c#
1.
2.
AddParameter(new DbParameter("@dateStart", ds.Date, SqlDbType.DateTime));
AddParameter(new DbParameter("@dateEnd", new DateTime(de.Year, de.Month, de.Day, 23, 59, 59), SqlDbType.DateTime));


вместо new DateTime(de.Year, de.Month, de.Day, 23, 59, 59) можно также написать:
Код: c#
1.
2.
de.Date.AddDays(1).AddSeconds(-1)
de.Date.AddSeconds(24*60*60-1)



Так можна же еще проверить правильность формата через DateTime.TryParse(.....);
...
Рейтинг: 0 / 0
21.05.2013, 20:11
    #38267194
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с датой
VIT2708, в данном случае ничего проверять не нужно. Суть в том, что код вида - DateTime.Parse(ds.ToString("d") + " 0:00:00") - неэффективен и легко поддается улучшению. Давай разберем его по шагам:
1) Мы берем значение DateTime (value тип) из стека, превращаем его в строку (ссылочный тип);
2) Склеиваем его со строковой константой получая новую строку;
3) Преобразуем строку в дату.
Таким образом ради простой операции получения даты начала и конца дня мы два раза выделяем память на куче. Есть простой способ этого избежать. Он приведен выше вместе с рекомендацией работать с датой как с датой.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проблема с датой / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]