大家好日子,
所以在这里,我的转发器控件的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,我知道这是一个蹩脚的问题,但它已经困扰了我很长一段时间。
答案 0 :(得分:0)
将前一个随机数存储在一个数组中并将这些数字发送到sql server,并将where condition用作WHERE questionnumber != arraynumber
答案 1 :(得分:0)
您的代码将在数据库中往返20次,因为您在每个while循环中选择一个问题,尝试创建new DataSet
并再次绑定数据源。这就是为什么你的清单只有一个问题。
为了避免往返数据库,而不是在代码中使用随机数和while
循环,摆脱while
循环,您可以使用SELECT
random在SQL中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();