标签从数据库c#中放置随机值

Posted

技术标签:

【中文标题】标签从数据库c#中放置随机值【英文标题】:to labels put random values from database c# 【发布时间】:2015-05-26 15:17:52 【问题描述】:

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

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

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(); 
        

表格示例 http://greenlight.ucoz.lv/11cqsvX/ac_lb.png

到 label1 昵称1, 到 label2 昵称26, 给label3昵称78, ...

请帮助我,对不起我的英语不好:)

【问题讨论】:

在 while 循环中,您使用相同的文本填充每个标签。无论如何,如果 ID 是唯一索引,您只会得到 1 个昵称 【参考方案1】:

我的想法是将您的 SQL 修改为 select a random row,因为您当前的 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();

【讨论】:

你能告诉我如何在我的代码中做到这一点吗?因为我是 C# 的初学者并且不知道如何 我不知道为什么,但对我来说有错误 - 表达式中未定义函数 'NEWID'。 哎呀。我没有看到您使用的是 MS Access。 SQL 已根据***.com/questions/9937222/… 进行了修改 我读过这个,但我不明白如何在我的代码中写这个:(你能帮忙吗? @MikeB 你的错误是你应该把读者放在using 声明中,这样他们就会被处理掉。 (你也应该对命令和连接做同样的事情)【参考方案2】:

得到答案,现在我的代码如下所示

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

【讨论】:

不要关闭阅读器,而是将其放在using statement 中。你也应该对连接和命令做同样的事情。 @eatmailyo 欢迎来到 SO!与其写自己的答案,不如投票并接受 MikeB 的答案,因为它与您刚刚发布的几乎相同。 @ScottChamberlain 没有关闭阅读器,我的程序不起作用:( 要接受答案,请单击其左上角的绿色复选标记。您不必投票。 使用using statments 为您调用.Dispose()Dispose() 为您调用Close()。您仍在关闭阅读器,您只是通过处理它以“正确”的方式关闭它。

以上是关于标签从数据库c#中放置随机值的主要内容,如果未能解决你的问题,请参考以下文章

通过 C# 在 Redis 中放置一个密钥

在每个路径中放置标签

如何在 Spring Boot 中的 JSONObject 内的 JSONArray 中放置 2 个或更多值?

如何使用 C# 在 Visual Studio 中放置图像? [关闭]

在 C# .cs 文件中放置 using 语句的位置[重复]

在 WKInterfaceTable 行中放置一个图像和两个标签