2013-03-26 51 views
0

我從互聯網上獲取代碼,它包含一個名爲TblQuestions.created Default.aspx的數據庫表,其文本框名稱爲TxtRequiredRecords & button1。 當值2在文本框中&點擊進入BUTTON1它隨機產生2 questions.if進入5它隨機產生 5個問題來自table.i要添加其他TextBox2中進入的option.my目的是,如果我在TextBox1中輸入2 和textbox2.it中的C將只從選項C問題中隨機生成2個問題。隨機從數據庫中獲取數據基於使用.net c的條件#

在哪裏我修改我的代碼來獲得結果?

我的代碼的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; 
} 
} 
+0

還有,你試過嗎? – JleruOHeP 2013-03-26 09:56:47

+0

哪個.NET版本?任何使用過時ArrayList的理由? – 2013-03-26 10:33:38

回答

2

通常情況下,ID範圍可以在他們的差距,你的代碼將失敗上。而且你也在努力避免重複。

正確的方式做到這一點

  • 獲得表ID的列表,你可以只對「選項C」添加一個條件。
  • shuffle的IDLIST
  • 取前N個元素
相關問題