2014-04-14 5 views
-2

У меня есть набор вопросов в моей базе данных, и мне нужно каждый раз получать их в случайном порядке.Как получить данные СЛУЧАЙНО с SQL Server с помощью C#

Может кто-нибудь, пожалуйста, помогите мне с кодом C#? Я использую Visual Studio 2012.

Заранее спасибо.

Вот код, я использую в данный момент:

using System; 
using System.Data; 
using System.Configuration; 
using System.Collections; 
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; 

public partial class perform_test : System.Web.UI.Page 
{ 
public int CurrentPage 
{ 
    get 
    { 
     object o = this.ViewState["_CurrentPage"]; 
     if (o == null) 
      return 0; 
     else 
      return (int)o; 
    } 

    set 
    { 
     this.ViewState["_CurrentPage"] = value; 
    } 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 


    //Response.Write(Session["Company"]); 
    if (!Page.IsPostBack) 
    { 
     Session.Add("CorrectAnswers", 0); 
     //Session.Add("Questions", 0); 
     Session.Add("Answer", ""); 

    } 
    if (repeat_exam_data.Controls.Count > 0) 
    { 
     for (int i = 1; i <= 4; i++) 
     { 
      RadioButton rad = repeat_exam_data.Controls[0].FindControl("Choice" + i.ToString()) as RadioButton; 
      if (rad.Checked) 
      { 
       Session["Answer"] = rad.Text; 
       break; 
      } 
     } 
    } 

    GetPage(); 
} 

protected void GetPage() 
{ 
    DataTable exam_data = new DataTable(); 

    exam_data = BussinessLayer.GetExamData(Session["Company"].ToString(), Session["Subject"].ToString(), Session["ExamId"].ToString()); 
    PagedDataSource pgds = new PagedDataSource(); 
    pgds.DataSource = exam_data.DefaultView; 
    pgds.AllowPaging = true; 
    pgds.PageSize = 1; 

    pgds.CurrentPageIndex = CurrentPage; 

    repeat_exam_data.DataSource = pgds; 
    repeat_exam_data.DataBind(); 

    Cmd_Next.Enabled = !pgds.IsLastPage; 
    Cmd_Finish.Enabled = pgds.IsLastPage; 
    lblQno.Text = Convert.ToString((CurrentPage + 1)); 
    lblCorrectAnswers.Text = Session["CorrectAnswers"].ToString(); 
} 
protected void Cmd_Next_Click(object sender, EventArgs e) 
{ 

    CalculateMark(); 

    CurrentPage += 1; 
    GetPage(); 
} 
protected void Cmd_Finish_Click(object sender, EventArgs e) 
{ 
    CalculateMark(); 

    string strSql = "INSERT INTO tbl_result(ExamId,StudentId,Mark) VALUES('" + Session["ExamId"] + "','" + Session["uname"] + "','" + Session["CorrectAnswers"] + "')"; 
    BussinessLayer.PutData(strSql); 
    Response.Redirect("~/canexamresult.aspx"); 
} 

private void CalculateMark() 
{ 
    HiddenField ans = repeat_exam_data.Controls[0].FindControl("Answer") as  HiddenField; 
    if (Session["Answer"].ToString() == ans.Value) 
     Session["CorrectAnswers"] = (int)Session["CorrectAnswers"] + 1; 

} 
} 

ответ

0

Вы можете использовать

ORDER BY NEWID(); 

как предложено Sleipneir, или загрузить весь весь набор данных в виде списка, и есть этот список в случайном порядке.

+0

спасибо большое !! :) – user3494640

1

Этот код dosn't содержит код, ответственный за данные feaching. Он находится внутри BussinessLayer.GetExamData(), вероятно. Вы можете achive случайного порядка, например с помощью

ORDER BY NEWID() 

в конце запроса.

+0

Возможно, пожалуйста, скажите мне, где я должен добавить ORDER BY NEWID() в следующий код DataTable dt = GetData ("SELECT * FROM Questions WHERE CompanyID =" + CompanyId + "" AND Subject = '"+ Subject + "'AND ExamID ='" + ExamId + "'"); return dt; – user3494640

+0

Спасибо большое @Sleipnir его работа !! :) – user3494640

+0

Данные извлекаются в случайном порядке, но проблема заключается в дублировании в извлеченных записях. Может у PLS помочь мне, чтобы избежать дублирования? – user3494640

Смежные вопросы