C# 从数据库c中放入随机值的步骤

C# 从数据库c中放入随机值的步骤,c#,ms-access,labels,C#,Ms Access,Labels,我需要从数据库中随机选择昵称,并将这些昵称显示给多个标签 我的代码在所有这些标签中只显示一个昵称,但我需要在按钮单击随机昵称后,在数据库中显示什么,在标签中显示什么 void Button1Click(object sender, EventArgs e) { OleDbConnection connection = new OleDbConnection(); connection.ConnectionString = @"Pro

我需要从数据库中随机选择昵称,并将这些昵称显示给多个标签

我的代码在所有这些标签中只显示一个昵称,但我需要在按钮单击随机昵称后,在数据库中显示什么,在标签中显示什么

void Button1Click(object sender, EventArgs e)
        {
            OleDbConnection connection = new OleDbConnection();
            connection.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=names.mdb";
            connection.Open();
            OleDbCommand command = new OleDbCommand();
            command.Connection = connection;
            command.CommandText = "SELECT ID,nickname FROM names where ID=3 ";
            OleDbDataReader reader = command.ExecuteReader();
            while (reader.Read()){
                label1.Text=reader["nickname"].ToString();
                label2.Text=reader["nickname"].ToString();
                label3.Text=reader["nickname"].ToString();
                label4.Text=reader["nickname"].ToString();
                label5.Text=reader["nickname"].ToString();
                label6.Text=reader["nickname"].ToString();
                label7.Text=reader["nickname"].ToString();
                label8.Text=reader["nickname"].ToString();
            }
            connection.Close(); 
        }
表格范例

到label1昵称1, 到label2昵称26, 到label3的昵称78,


请帮助我并为我糟糕的英语道歉:

我的想法是将您的SQL修改为,因为您当前的SQL将始终选择同一行。通过遍历每个标签,对每个标签执行此操作

private void button1_Click(object sender, EventArgs e)
{
  OleDbConnection connection = new OleDbConnection();
  connection.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=names.mdb";
  connection.Open();

  foreach (Control control in Controls)
  {
    if (control is Label)
    {
      OleDbCommand command = new OleDbCommand();
      command.Connection = connection;
      command.CommandText = "SELECT nickname FROM names ORDER BY rnd(ID)";
      OleDbDataReader reader = command.ExecuteReader();
      reader.Read();
      control.Text = reader["nickname"].ToString();
    }
  }
  connection.Close();
}

得到答案,现在我的代码看这个

OleDbConnection connection = new OleDbConnection();
            connection.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=names.mdb";
            connection.Open();
            OleDbCommand command = new OleDbCommand();
            command.Connection = connection;
            command.CommandText = "SELECT ID,nickname FROM names ORDER BY rnd(ID)";
            foreach (Control control in Controls)
  {
    if (control is Label)
    {
      OleDbDataReader reader = command.ExecuteReader();
      reader.Read();
      control.Text = reader["nickname"].ToString();
      reader.Close();
    }
  }
            connection.Close();

感谢@MikeB

在while循环中,您使用相同的文本填充每个标签。无论如何,如果ID是一个唯一的索引,你只能得到一个昵称,你能告诉我如何在我的代码中这样做吗?因为我是c语言的初学者,不知道怎么做,也不知道为什么,但对我来说,expression.oops中有一个错误-未定义的函数“NEWID”。我没看到你在使用MS Access。SQL已经根据我读到的内容进行了修改,但我不明白如何在我的代码中编写:你能帮我吗?@MikeB你的错误是你应该让读者使用语句,这样他们就可以处理了。您应该对命令和连接执行相同的操作。不要关闭读卡器,而是将其放入。您也应该对连接和命令执行同样的操作。@eatmailyo欢迎使用SO!不要写你自己的答案,你应该投票并接受MikeB的答案,因为它与你刚刚发布的答案几乎相同。@ScottChamberlain没有关闭阅读器,我的程序不起作用:要接受答案,请单击左上角的绿色复选标记。您不必向上投票。使用Using STATINTS呼叫。为您处置,为您处置呼叫关闭。您仍在关闭读卡器,您只是以正确的方式关闭它,并将其处理掉。