我试图为我一直在努力的项目添加画龙点睛,目前我正在尝试修改我创建的功能。其特点是,如果学生完成考试,他们就能查看结果。但是,我想要做的是创建一个if else语句,基本上是:如果考试已经完成,那么它们将被重定向到向他们展示特定考试成绩的页面。否则,它会在页面顶部返回一条消息,说明"此检查尚未完成。"
我当前的代码(通过页面上的按钮操作)是:
protected void btnViewPrevExam_Click(object sender, EventArgs e)
{
Session["intExaminationID"] = ddlExamination.SelectedValue;
Int32 int32StudentID = Convert.ToInt32(Session["StudentID"]);
Session["int32StudentID"] = Convert.ToInt32(int32StudentID);
// Define the ADO.NET connection object.
SqlConnection objSqlConnection = new SqlConnection(WebConfigurationManager.ConnectionStrings["OPT"].ConnectionString);
// Develop the SQL call.
// Develop the SQL call.
String strSQL = "";
strSQL = "SELECT AnswerID, Question, OptionA, OptionB, OptionC, OptionD, CorrectAnswer, Answer ";
strSQL += " FROM Question, Answer, Examination, Student ";
strSQL += " WHERE Examination.ExaminationID = " + ddlExamination.SelectedValue;
strSQL += " AND Student.StudentID = " + int32StudentID;
strSQL += " AND Answer.QuestionID = Question.QuestionID ";
strSQL += " AND Answer.StudentID = Student.StudentID ";
strSQL += " AND Examination.ExaminationID = Question.ExaminationID ";
// Create the SQL command object.
SqlCommand objSqlCommand = new SqlCommand(strSQL, objSqlConnection);
// Retrieve the row from the table.
objSqlConnection.Open();
SqlDataReader objSqlDataReader = objSqlCommand.ExecuteReader();
objSqlDataReader.Read();
if (strSQL != null)
{
objSqlDataReader.Close();
objSqlConnection.Close();
Response.Redirect("StudentExamResults.aspx");
}
else
{
this.Master.MessageForeColor = System.Drawing.Color.Red;
this.Master.Message = "The selected examination has not been completed.";
}
}
此按钮当前的作用是,无论考试是否已完成,它都会将学生发送到考试结果页面。这是由于" if(strSQL!= null)"并且它永远不会为null,因为SQL调用已经完成并被填充。我尝试了其他想法,以及为AnswerID执行objSqlDataReader,但它没有正常工作。这是我想要添加到这个项目中的一个小额外功能,如果我能找到一些帮助来理清我做错了什么,我会非常高兴。提前谢谢!
答案 0 :(得分:2)
测试>>> words_copy = words.copy()
>>> def select_word():
if len(words_copy) == 0:
raise Exception("No More Unique Word Left")
chosen_index = random.randint(0,len(words_copy)-1)
chosen_word = words_copy[chosen_index]
del words_copy[chosen_index]
return chosen_word
不是strSQL
是否会成功,因为您在方法前面将其设置为非null
值。
要查看以前完成的考试是否已存在记录,您需要检查对objSqlDataReader.Read()
的呼叫的返回值;只要在null
查询中有其他行(或者,在本例中为第一行),它就会返回true
。因此,改变这个......
SELECT
......对此...
objSqlDataReader.Read();
if (strSQL != null)
{
作为补充说明,请考虑在using
blocks中包装if (objSqlDataReader.Read())
{
,objSqlConnection
和objSqlCommand
,以确保正确关闭/处置它们。就像现在一样,当考试需要完成时,您不会关闭objSqlDataReader
和objSqlDataReader
,并且根本不会处理objSqlConnection
。无论objSqlCommand
的哪个分支被采用,objSqlDataReader
将按如下方式关闭......
if
答案 1 :(得分:1)
假设您不关心内容,而只是想检查该行是否存在,您可以这样做:
string sql = "SELECT COUNT(AnswerID) FROM Question ........ WHERE ......";
using (var connection = CreateConnection()) {
using (var cmd = new SqlCommand(sql, connection)) {
bool exists = (int) cmd.ExecuteScalar() > 0;
if (exists) {
Response.Redirect("StudentExamResults.aspx");
} else {
// Do the other thing
}
}
}