gpt4 book ai didi

c# - 使用 SQL 调用从数据库中检索数据后的特定 if else 语句。 Visual Studio 2015/C#

转载 作者:太空宇宙 更新时间:2023-11-03 22:45:37 25 4
gpt4 key购买 nike

我正在尝试为我一直在从事的项目添加画龙点睛的一笔,目前正在尝试修改我创建的一项功能。特点是如果学生完成了考试,他们就可以查看结果。但是,我想做的是创建一个 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)”这一行造成的,它永远不会为空,因为已经进行了 SQL 调用并已填充。我已经尝试过其他想法,以及为 AnswerID 执行 objSqlDataReader,但它没有正常工作。这是我想添加到这个项目中的一个小额外功能,如果我能找到一些帮助来解决我做错的事情,我将非常高兴。提前致谢!

最佳答案

测试 strSQL 是否不是 null 总是会成功,因为您在方法的前面将其设置为非 null 值。

要查看之前完成的检查的记录是否已存在,您需要检查调用 objSqlDataReader.Read() 的返回值;只要您的 SELECT 查询中还有其他行(或者在本例中为第一行)要使用,它就会返回 true。因此,改变这个...

objSqlDataReader.Read();
if (strSQL != null)
{

...为此...

if (objSqlDataReader.Read())
{

作为附加说明,请考虑将 objSqlConnectionobjSqlCommandobjSqlDataReader 包装在 using blocks 中以确保它们被正确关闭/处置。就像现在一样,当需要完成考试时,您不会关闭 objSqlDataReaderobjSqlConnection,并且根本不会处理 objSqlCommandobjSqlDataReader 将按如下方式关闭,而不管 if 的哪个分支...

using (SqlDataReader objSqlDataReader = objSqlCommand.ExecuteReader())
{
if (objSqlDataReader.Read())
{
//objSqlDataReader.Close();// No longer necessary - handled by using
objSqlConnection.Close();
Response.Redirect("StudentExamResults.aspx");
}
else
{
this.Master.MessageForeColor = System.Drawing.Color.Red;
this.Master.Message = "The selected examination has not been completed.";
}
}

关于c# - 使用 SQL 调用从数据库中检索数据后的特定 if else 语句。 Visual Studio 2015/C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50083559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com