【问题标题】:mysql select query skipping first row valuesmysql select查询跳过第一行值
【发布时间】:2015-09-17 06:20:33
【问题描述】:

我的网页中只有一个带有学生 ID 的下拉列表和一个带有学生图像的网格视图。 如果我选择一个学生,网格视图必须显示所选学生的所有图像。 问题是当我选择一个学生时,我的网格视图会跳过前两个值。 我的意思是如果有 6 张图片,网格视图只显示 4 张图片。 这是我的代码:

private void BindGrid()
{
    MySqlConnection con = new MySqlConnection(constr);
    MySqlCommand cmd = new MySqlCommand("SELECT * FROM images where Image_ID in (" + String.Join(",", getImage_ID()) + ")", con);
    MySqlDataAdapter da = new MySqlDataAdapter(cmd);
    DataTable dt = new DataTable();
    da.Fill(dt);
    gvImages.DataSource = dt;
    gvImages.DataBind();
}
private List<int> getImage_ID()
{
    List<int> i = new List<int>();
    MySqlConnection con = new MySqlConnection(constr);
    con.Open();
    string query = "Select Come_Image_ID1, Leave_Image_ID from register where Students_ID='" + getStudents_ID() + "' AND Come_Image_ID IS NOT NULL AND Leave_Image_ID IS NOT NULL"; 
    MySqlCommand cmd = new MySqlCommand(query);
    cmd.Connection = con;
    MySqlDataReader reader = cmd.ExecuteReader();
    while (reader.Read())
    {
        foreach (DbDataRecord s in reader)
        {
            i.Add(s.GetInt32(0));
            i.Add(s.GetInt32(1));
        }
    }
    reader.Close();
    return i;
}

解决这个问题的最佳编码实践是什么?

【问题讨论】:

  • 我不使用 Java,所以这只是一个猜测:摆脱 while 循环。 foreach 已经循环遍历所有行。 reader.Read() 正在获取第一行,因此foreach 循环从下一行开始。
  • 这可以解释为什么它会跳过第一行,我不确定它为什么会跳过第二行。

标签: c# mysql


【解决方案1】:

您正在混合读取数据的方式。要么你是while 循环:

while (reader.Read())
{
    i.Add(reader.GetInt32(0));
    i.Add(reader.GetInt32(1));
}

foreach 循环:

foreach (DbDataRecord s in reader)
{
    i.Add(s.GetInt32(0));
    i.Add(s.GetInt32(1));
}

但不是两者兼而有之。 whileforeach 都使用游标中的记录,当您像这样混合它们时,您会跳过 while 循环使用的记录。

【讨论】:

    猜你喜欢
    • 2013-03-08
    • 2021-04-08
    • 2011-12-24
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    相关资源
    最近更新 更多