【问题标题】:unreachable code detected on for loop在 for 循环中检测到无法访问的代码
【发布时间】:2015-02-06 22:12:31
【问题描述】:

尝试从我的问题中找到类似但似乎检测到太多无法访问的代码

我的表由 4 行组成,我尝试了此代码

using (MySqlConnection conn = new MySqlConnection(myConnection))
{
    conn.Open();
    MySqlCommand cmd = new MySqlCommand(query, conn);
    int num = Convert.ToInt32(cmd.ExecuteScalar());
    MySqlCommand cmd1 = new MySqlCommand(query2, conn);
    MySqlDataReader reader = cmd1.ExecuteReader();

    while (reader.Read())
    {
        for (int a = 0; a <= num; a++)
        {
            List li = new List();
            li.linkLabel1.Text = reader["TitleAnime"].ToString();
            flowLayoutPanel1.Controls.Add(li);
            // break;
        }
    }
    conn.Close();
}

但是它给了我 16 个值,这太多了,然后我尝试在 for 循环中放入 break,我能够实现我的目标,它给了我 4 个值,这在我的表上是相同的,但似乎有一个错误调用检测到无法访问的代码..我应该忽略它,因为我能够得到我需要的东西吗?或者有其他方法吗

【问题讨论】:

  • 您不需要先从数据库中读取numwhile (reader.Read()) 已经为您读取了所有记录。要么,要么你的query2 没有做你认为它正在做的事情。
  • 抱歉我的错误。我正在尝试首先获取行数,该值将是循环的长度或限制..
  • 字符串查询 = "SELECT COUNT(TitleAnime) FROM maindatabase.animelist;"; string query2 = "SELECT TitleAnime FROM maindatabase.animelist";
  • 你得到 16 而不是 4 的原因是你有一个 for() 循环,每次读取运行 4 次。你可以摆脱它。

标签: c# mysql visual-studio-2010


【解决方案1】:

我很确定你在那里做了太多的查询,并且由于第一个查询和那个 for 循环,你得到了 NxN 个结果。

试试这样的:

using (MySqlConnection conn = new MySqlConnection(myConnection))
{
    conn.Open();
    MySqlCommand cmd1 = new MySqlCommand(query2, conn);
    MySqlDataReader reader = cmd1.ExecuteReader();

    while (reader.Read())
    {
        List li = new List();
        li.linkLabel1.Text = reader["TitleAnime"].ToString();
        flowLayoutPanel1.Controls.Add(li);
    }
    conn.Close();
}

如果这样做,请考虑将 query1cmd1 的名称更改为 querycmd,因为现在您将只有一个

【讨论】:

  • tnx 这段代码有助于阅读器实际上自动阅读次数而不需要循环
【解决方案2】:

这很简单。您正在根据命令对象中数据库中的条目数运行 for 循环。

如果您的数据库中有多少条记录,则 read 方法将迭代四次。更多信息请参考这篇文章:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.read(v=vs.110).aspx

简而言之,只要去掉 for 循环,你就会得到你想要的结果。

【讨论】:

  • 还有一个问题..如果我要删除for循环。我如何重复链接标签的次数相当于我数据库中条目数的次数..你能给我一些吗至少骨骼代码供参考..
【解决方案3】:

试试这样的:

while (reader.Read())
{
    flowLayoutPanel1.Controls
        .Add(new List { linkLabel1.Text = reader["TitleAnime"].ToString()});
}

【讨论】:

  • tnx 也会试试这个
猜你喜欢
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
  • 2011-05-09
  • 2018-09-21
  • 1970-01-01
  • 2014-01-22
相关资源
最近更新 更多