Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用.NETC根据条件从数据库中随机抽取数据_C#_.net_Database - Fatal编程技术网

C# 使用.NETC根据条件从数据库中随机抽取数据

C# 使用.NETC根据条件从数据库中随机抽取数据,c#,.net,database,C#,.net,Database,我从互联网上获得了代码,它由一个名为TblQuestions的数据库表组成。创建了一个Default.aspx页面,文本框名为txtrequeredrecords&button1。 当值为2时,在文本框中输入并单击按钮1,它将随机生成2个问题。如果输入5,它将随机生成2个问题 表中的5个问题。我想添加另一个文本框2以输入选项。我的目标是,如果我在文本框1中输入2 和文本框2中的C。它将仅从选项C问题中随机生成2个问题 我在代码中的何处修改以获得结果 我的代码Default.aspx:- <

我从互联网上获得了代码,它由一个名为TblQuestions的数据库表组成。创建了一个Default.aspx页面,文本框名为txtrequeredrecords&button1。 当值为2时,在文本框中输入并单击按钮1,它将随机生成2个问题。如果输入5,它将随机生成2个问题 表中的5个问题。我想添加另一个文本框2以输入选项。我的目标是,如果我在文本框1中输入2 和文本框2中的C。它将仅从选项C问题中随机生成2个问题

我在代码中的何处修改以获得结果

我的代码Default.aspx:-

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">`
 <title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
    <div>
        <asp:TextBox ID="TxtRequiredRecords" runat="server"></asp:TextBox>
        <asp:Button ID="BtnDisplayRecords" runat="server" OnClick="Button1_Click" Text="Display Records" />
        <br />
        <br />
        <asp:GridView ID="GvResults" runat="server">
        </asp:GridView>
    </div>
</form>
</body>
</html>
c代码:-

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Collections;
public partial class _Default : System.Web.UI.Page
{
static int TotalRecords;
SqlConnection con;
SqlDataAdapter sqlda;
DataTable dt;
protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        string query = "SELECT COUNT(*) AS TotalRecords FROM TblQuestions";
        DataTable dt = GetRecords(query);
        TotalRecords = Convert.ToInt32(dt.Rows[0]["TotalRecords"]);
    }

}
protected void Button1_Click(object sender, EventArgs e)
{
    bool IsInt;
    int RequiredRecords;
    string CSVData, query;
    IsInt = Int32.TryParse(TxtRequiredRecords.Text, out RequiredRecords);
    if (IsInt)
    {
        if (TotalRecords >= RequiredRecords)
        {
            CSVData = GetRandomNumbersCSV(TotalRecords, RequiredRecords);
            query = "SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY QuestionID) AS RowID,* FROM TblQuestions)TempTable WHERE RowID IN(" + CSVData + ")";
            dt = GetRecords(query);
            GvResults.DataSource = dt;
            GvResults.DataBind();
        }
        else
        {
            Response.Write("Required Records must be greater than Requried Records.");
        }
    }
    else
    {
        Response.Write("Invalid Number");
    }
}

public ArrayList RandomNumbers(int max)
{
    ArrayList lstNumbers = new ArrayList();
    Random rndNumber = new Random();
    int number = rndNumber.Next(1, max + 1);
    lstNumbers.Add(number);
    int count = 0;
    do
    {
        number = rndNumber.Next(1, max + 1);
        if (!lstNumbers.Contains(number))
        {
            lstNumbers.Add(number);
        }
        count++;
    }
    while (count <= 10 * max);
    return lstNumbers;
}

public string GetRandomNumbersCSV(int max, int req)
{
    string CSV = "";
    ArrayList lstNumbers = RandomNumbers(max);
    for (int i = 0; i < req; i++)
        CSV += lstNumbers[i].ToString() + ",";
    CSV = CSV.Remove(CSV.Length - 1);
    return CSV;
}

public DataTable GetRecords(string Query)
{
    con = GetConnection();
    con.Open();
    sqlda = new SqlDataAdapter(Query, con);
    dt = new DataTable();
    sqlda.Fill(dt);
    con.Close();
    return dt;
}

public SqlConnection GetConnection()
{
    con = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlcon"].ToString());
    return con;
}
}

通常情况下,ID范围中可能有间隙,您的代码将在这方面失败。你也在努力避免重复

正确的方法是这样做的

从表中获取ID列表,您只能为选项C添加条件。 懒汉 以前N个元素为例
你试过什么?哪个.NET版本?有没有理由使用过时的ArrayList?