0

みなさん、良い一日を、

したがって、ここでは、リピーターコントロールのSQLクエリに問題があります。実際に実行したいのは、1から60までのランダムな数値があり、データベースにどのテスト質問を選択するかを指示することです(1つしかない場合は、問題ありません、ハハ。)しかし、データベースからリピーターコントロールに20の質問を表示する必要があります。私のデータベースには60の質問もあります。そうそう、私はネットでいくつかの解決策を試しましたが、私のコードは常に1つのレコードしか返さず、それはかなりの苦痛です。誰かが私を助けてくれることを願っています、私はそれが非常に基本的であることを知っていますが、私は新進のプログラマーにすぎないので、ええ、事前に感謝します。

ところで、これはコードのチャンクです、

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

以前のランドン番号を配列に格納し、それらの番号をsqlserverに送信して、where条件を次のように使用します。WHERE questionnumber != arraynumber

于 2012-08-18T09:34:58.677 に答える
0

コードはデータベース内で20回往復します。これは、whileループごとに1つの質問を選択し、new DataSetデータソースの作成とバインドを再試行するためです。そのため、リストには1つの質問しかありません。

データベースへのラウンドトリップを回避するために、コードで乱数とwhileループを使用する代わりに、ループを取り除くために、SQLでランダムwhileを使用できます。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 に答える