【问题标题】:Random function from specific sql table来自特定 sql 表的随机函数
【发布时间】:2017-01-18 07:46:08
【问题描述】:

我必须用 c# 创建一个彩票程序。

我使用的表是 3。

第一个表:Clients

Client_num   Client_Name    Client_ID

二表:Prize

 Prize_Name  Prize_ID

第三桌:Report

Prize_ID   Client_ID  ID_Number   --(who can be not unique).

我的任务是创建一个可视化客户编号的表单(在 1 到 435333 之间,每个月的客户编号都不同,因为我是根据特定标准生成的)。

为此,我在我的代码中使用选择查询 - 从表 Clents 返回 MAX ID。

除了客户编号,我必须可视化奖品名称,并且这两行必须在报告中可视化。 我的问题是 - 如何创建 1 到 435533 之间的随机数,因为这些数字是文本框中“客户”表中的客户编号 - 客户编号。

代码如下:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        Random Lottery = new Random();

        SqlConnection con = new SqlConnection("Data Source=sqlsrvr;Initial Catalog=lottery;Integrated Security=True;");
        con.Open();
        SqlCommand cmd = new SqlCommand("SELECT MAX(id) AS ID FROM clients", con);
        cmd.ExecuteNonQuery();
        con.Close();
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {

    }

    private void textBox3_TextChanged(object sender, EventArgs e)
    {

    }
}

}

【问题讨论】:

  • int randomNumber = Lottery.Next(1, 435533);?
  • 表格或这与随机数有什么关系?为什么不直接使用Random 类?请重写问题,解释实际问题并发布相关代码
  • 你问的是如何从数据库中返回一条随机记录还是如何在c#中生成一个随机数?
  • 对不正确的问题表示歉意。这个随机数是“客户”表中的正确客户 - 我每个月都会生成,其中 50 个必须赢得我的特定奖品。重要的是程序彩票从表“客户”轮换客户编号,然后我按下输入以下载第一个有利可图的客户......之后第二个等到第 50 个。
  • 还是不太清楚。你到底在问什么?

标签: c# sql-server winforms random


【解决方案1】:

从您的客户表中随机选择 50 个 ID

SELECT TOP 50 id FROM clients ORDER BY NEWID()

【讨论】:

  • 感谢您的回答,但是这50个随机数字必须从彩票程序中的所有其他数字(435333)中提取。当我画第一个数字时,按 enter ,画第二个数字,直到第 50 个。
  • "SELECT TOP 1 id FROM clients ORDER BY NEWID()" 这会从您的记录中随机选择一个 id(即您的 clients 表中的 435333 条记录),但每次您可能会得到相同的 id画。为什么不一次画 50 个并一次显示一个?
【解决方案2】:

很难理解您的要求,我已经尝试将它们总结在下面,如果这不正确,那么解决方案也是错误的!

总结:

  1. 您有一个客户列表,每个客户都有一个唯一的“客户 ID”
  2. 每个月,客户都会参加抽奖活动以中奖
  3. 50 位随机客户被选为获胜者。
  4. 下个月,排除之前中奖的客户 抽奖。
  5. 剩余的客户参与赢取奖品。

第 4 点和第 5 点对问题和解决方案很重要。

基于此,我建议以下内容。这只是 Pseduo 代码,您可以在 C# 或 SQL 中执行某些部分,因此您可以选择。

  1. 提取之前没有获胜的客户。

    从没有clients.client_id的客户端中选择ROW_NUMBER()、Client_num、Client_Name、Client_ID(从报告中选择client_id);

ROW_NUMBER()(这可能因您的数据库而异)将为您提取的每条记录提供一个记录/行号。现在这是您将在下一部分中使用的新的临时顺序唯一 ID。

  1. 将它们加载到集合中,例如List<Clients>
  2. 计算您拥有的记录数。这是你的最大值。
  3. 根据行号随机选择最多 50 条记录。
  4. 对于每一项,获取 client_id 并更新数据库中的表格以记录获胜者。

现在您有 50 位从未赢过的独特获胜者。

这确实意味着随着时间的推移,可能的获胜者名单会越来越少,直到最终你的可能获胜者将少于 50 个。因此,您还必须应对这种可能性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-02
    • 2022-10-19
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多