Набор данных C # - Как показать одну и ту же запись с разными датами - PullRequest
0 голосов
/ 06 апреля 2011

У меня есть таблица, в которой хранится информация о некоторых событиях, которые отображаются на сайте.Эти события повторяются каждую неделю, поэтому вместо того, чтобы вводить одно и то же событие для каждой недели, я хотел иметь возможность, чтобы пользователь просто устанавливал флажок (повторял каждую неделю), а затем каким-то образом читал, если запись имеет этот флажок, показывать запись сразные даты (добавить семь дней).Другая проблема заключается в том, что может быть более двух событий, которые будут повторяться каждую неделю.Я думал, что должен справиться с этим во время выполнения, когда страница загружается, или я должен обработать это при вводе данных?Может кто-нибудь дать мне направление?Когда страница загружается, я просто заполняю набор данных следующим образом, а затем просто привязываю набор к набору данных:

        DataSet eventsDS = new DataSet();

        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = ConfigurationManager.ConnectionStrings["DBConnectionString"].ConnectionString;

        SqlCommand command = new SqlCommand("SELECT * FROM [tbl_events]order by [date]", conn);

        SqlDataAdapter daEvents = new SqlDataAdapter(command);
        daEvents.Fill(eventsDS);

1 Ответ

0 голосов
/ 06 апреля 2011

Подобные вещи выходят далеко за рамки возможностей любой основной системы баз данных.Это также создает кучу проблем, с которыми вы, вероятно, не хотите иметь дело.Решить эти проблемы было бы гораздо сложнее, чем просто добавить событие в базу данных на каждую неделю.

Например, если у вас было событие, которое начинается 2011/01/01 и повторяется каждую неделю, тогда ваш запрос, select * from [tbl_events] order by [date] будет производить бесконечный набор результатов, начиная с 2011/01/01.Я полагаю, что вы можете ограничить его, указав диапазон дат, но если вы когда-нибудь забудете конечное значение, запрос будет стирать результаты до тех пор, пока вы не превысите некоторый лимит.

То же самое произойдет, если вынаписать код, чтобы сделать это.Ваш код должен был бы установить некоторый верхний предел количества недель, для которых вы показываете события.

Вы можете выбрать один из двух вариантов:

1) Вводить одну запись события в базе данных на каждую неделю,с каким-то верхним пределом количества недель вперед вы добавляете записи.Вам также понадобится способ добавить больше записей для повторяющегося события.Например, возможно, вы изначально добавляете 26 событий (на 6 месяцев), а затем после того, как событие происходит каждую неделю, программа автоматически добавляет одно на 6 месяцев в будущем.

2) Введите одну запись о событии, которая получаетобновляется с новой датой запуска каждую неделю.Теперь ваша проблема в отчетности.После запроса вы должны определить, что запись является повторяющимся событием, а затем решить, сколько событий вы хотите показать.

Второй вариант становится проблемой, если вы хотите выполнить запрос диапазона, потому что вы можетепросто проверьте поле [date] на события в будущем.Вы можете сохранить поля begin_date и end_date и выполнить запрос диапазона к ним.

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

...