C#数据集 - 如何显示具有不同日期的相同记录

时间:2011-04-05 21:36:01

标签: c# ado.net dataset record repeat

我有一个表格,用于存储有关网站上显示的某些事件的信息。这些事件每周重复一次,因此我不想每周都输入相同的事件,而是希望用户只选择复选框(每周重复一次),然后以某种方式读取记录是否已经选中显示该记录不同的日期(增加七天)。另一个问题是每周可能会有两个以上的事件重复。我认为我应该在页面加载时在运行时处理这个问题,还是应该在输入数据时处理它?有人能指点我吗?当页面加载时,我只是按如下方式填充数据集,然后将网格绑定到数据集:

        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 :(得分:0)

这种方式超出了任何主流数据库系统的能力。它还介绍了一些您可能不想处理的问题。处理这些问题比每周向数据库添加一个事件更麻烦。

例如,如果您有一个事件从2011/01/01开始并且每周重复一次,那么您的查询select * from [tbl_events] order by [date]将产生一个无限的结果集,从2011/01/01开始。我想你可以通过提供一个日期范围来限制它,但是如果你忘记了一个结束值,那么查询会在你超出某个限制之前磨掉结果。

如果您要编写代码来执行此操作,则会发生同样的事情。您的代码必须对您显示事件的周数设置一些上限。

您的两个选择是:

1)每周在数据库中输入一个事件记录,并在添加记录前几周提供某种上限。您还需要一些方法为重复事件添加更多记录。例如,您最初可能会添加26个事件(持续6个月),然后在每周事件发生后,程序将在未来自动添加6个月。

2)输入一个事件记录,每周更新一次新的触发日期。现在您的问题在于报告。查询之后,您必须确定记录是重复事件,然后确定要显示的事件数。

如果要进行范围查询,则第二个选项会成为问题,因为您不能仅在[date]字段中查看将来的事件。您可以存储begin_dateend_date字段,并针对这些字段执行范围查询。

您选择哪种方法在很大程度上取决于您将如何使用该系统。如果它主要用于一次发生的事件,那么你可能最好使用第一个选项。如果系统主要用于在计划上重复的事件,那么您可能希望使用第二个选项并形式化开始和结束日期以及重复频率的概念。