0

今天是个好日子,

所以在这里,我的转发器控件的 SQL 查询有问题,我真正想要发生的是,我有一个从 1 到 60 的随机数,它将告诉数据库选择哪个测试问题,(如果它只有一个,这不是问题,哈哈。)但是,我需要从我的数据库向转发器控件显示 20 个问题。我的数据库还包含 60 个问题。所以是的,我在网上尝试了一些解决方案,但是我的代码总是只返回一条记录,这很痛苦。希望有人可以帮助我,我知道有些人很基础,但我只是一个初出茅庐的程序员,所以,是的,在此先感谢。

顺便说一句,这是代码块,

protected void Page_Load(object sender, EventArgs e)
{
    int i = 1;
    Random r = new Random();
        while (i <= 20)
        {
            int iss;
            string constr = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Mark\Desktop\thesis\WebSite8\App_Data\thesisDB.mdf;Integrated Security=True;User Instance=True";
            SqlConnection con = new SqlConnection(constr);
            string com = "SELECT * from CHAP1_quiz WHERE questionnumber = @num";
            SqlDataAdapter comms = new SqlDataAdapter();
            SqlCommand cmd = new SqlCommand(com, con);
            iss = r.Next(1, 60);
            comms.SelectCommand = cmd;
            cmd.Parameters.Add("@num");
            DataSet ds = new DataSet();
            con.Open();
            comms.Fill(ds);
            Repeater1.DataSource = ds;
            Repeater1.DataBind();
            i++;;
            con.Close();
        }
}

哦,是的,让我告诉你,当我运行这段代码时,它只显示 1 条记录。但我需要 20 个,我知道这是一个蹩脚的问题,但它已经困扰了我很长一段时间。

4

2 回答 2

0

您的代码将在数据库中往返 20 次,因为每个 while 循环您选择一个问题,尝试再次创建new DataSet和绑定数据源。这就是为什么你的清单只有一个问题。

为了避免到数据库的往返,而不是while在代码中使用随机数和循环,摆脱while循环,您可以在 SQL中使用SELECT 随机数ORDER BY NEWID()

string constr = "...";
DataSet ds = new DataSet();

using (var con = new SqlConnection(constr))
{
    string sql = "SELECT TOP 20 * from CHAP1_quiz ORDER BY NEWID()";
    var adapter = new SqlDataAdapter();
    var cmd = new SqlCommand(sql, con);
    adapter.SelectCommand = cmd;

    con.Open();
    comms.Fill(ds);  
}

Repeater1.DataSource = ds;
Repeater1.DataBind();
于 2012-08-18T09:58:04.003 回答
0

将前一个随机数存储在一个数组中并将这些数字发送到 sqlserver 并使用 where 条件作为WHERE questionnumber != arraynumber

于 2012-08-18T09:34:58.677 回答