SQL查询返回2个结果,但在C#网页中仅显示1个结果

时间:2018-07-17 14:11:46

标签: c# sql arraylist

我有一张表,它列出了一家公司的营业时间,该表有四列:Id,工作,开始和完成。

Monday     1/1/1900 8:00:00 AM    1/1/1900 5:00:00 PM
Tuesday    1/1/1900 8:00:00 AM    1/1/1900 5:00:00 PM
Wednesday  1/1/1900 8:00:00 AM    1/1/1900 5:00:00 PM
Thursday   1/1/1900 8:00:00 AM    1/1/1900 5:00:00 PM
Friday     1/1/1900 8:00:00 AM    1/1/1900 3:00:00 PM
Saturday   1/1/1900 12:00:00 AM   1/1/1900 12:00:00 AM
Sunday     1/1/1900 12:00:00 AM   1/1/1900 12:00:00 AM

我使用此查询在gridview表中显示了开放时间,并且工作正常。我得到一张周一至周五显示的表格,以及开放和关闭的时间。

select * from Schedule where [Commencing] != [Finishing];

然后我创建了一个名为Scheduling的类。

public class Scheduling
{
public int Id { get; set; }
public string Working { get; set; }

public Scheduling(int Id, string Working)
{
    this.Id = Id;
    this.Working = Working;
}
}

并如下更新我的ConnectionClass:

public static ArrayList GetCloseSchedule(string Id)
{
    ArrayList list = new ArrayList();
    string query = string.Format("select * from Schedule where [Commencing] = [Finishing]", Id);

    try
    {
        conn.Open();
        command.CommandText = query;
        SqlDataReader reader = command.ExecuteReader();

        while (reader.Read())
        {
            int id = reader.GetInt32(0);
            string Working = reader.GetString(1);

            Scheduling schedules = new Scheduling(id, Working);
            list.Add(schedules);
        }
    }
    finally
    {
        conn.Close();
    }

    return list;
}

然后将其保存在default.aspx.cs文件中。

str = "select * from Schedule where [Commencing] = [Finishing]";
    com = new SqlCommand(str, con);
    ArrayList Scheduling = ConnectionClass.GetCloseSchedule(lblMsgO.Text);

    foreach (Scheduling schedules in Scheduling)
    {
        sb.Append(string.Format(@"{0}<br />",
           schedules.Working));

        lblMsgO.Text = sb.ToString();

        sb.Clear();
        reader.Close();
        con.Close();
    }

这是一个非常简单的查询,我已经成功完成了其中的几个查询,因此我不确定为什么这个查询无法正常工作。即使我在数据库中测试SQL查询时,两行都出现,它仅显示星期日,而跳过星期六。

1 个答案:

答案 0 :(得分:1)

在您的default.aspx.cs中,您每次循环都覆盖lblMsg0中的值。您应该退出对label的写操作,并在循环之外清除StringBuilder(如果您在每个时间清除StringBuilder值,那么您将失去使用StringBuilder的意义:

str = "select * from Schedule where [Commencing] = [Finishing]";
com = new SqlCommand(str, con);
ArrayList Scheduling = ConnectionClass.GetCloseSchedule(lblMsgO.Text);

foreach (Scheduling schedules in Scheduling)
{
    sb.Append(string.Format(@"{0}<br />",
       schedules.Working));
}

lblMsgO.Text = sb.ToString();

sb.Clear();
reader.Close();
con.Close();

此外,对于连接,您应该使用using块来创建和处置连接,而不要自己关闭。