C#测验应用中正确答案计数无法正常递增的问题求助
C#测验应用中正确答案计数无法正常递增的问题求助
Hey,我来帮你排查这个计数不递增的问题~
你代码里的核心问题很明显:previousQSet和correctAnswerCount是方法内部的局部变量!每次调用SaveResultsToDatabase方法时,这两个变量都会被重新初始化(previousQSet变回null,correctAnswerCount变回0),完全没法记住上一次调用时的状态,自然就没法跨题目累积计数了。
给你一个简单有效的修复方案:
第一步:把状态变量改成类的成员变量
在你的类(也就是包含SaveResultsToDatabase方法的类)里,把这两个变量声明为类级别的成员,这样它们的状态就能在多次方法调用之间保留:
// 类的成员变量,放在方法外面 private string _previousQSet = null; private int _correctAnswerCount = 0;
第二步:修改方法逻辑,使用成员变量
把方法里原来的局部变量声明删掉,换成上面的成员变量:
private void SaveResultsToDatabase(string studentAnswer, string currentQuestion) { // 这里用类成员变量,不再重新初始化 if (currentQSet != _previousQSet) { _correctAnswerCount = GetCorrectAnswerCount(studentId, currentQSet); _previousQSet = currentQSet; } string result = studentAnswer == correctAnswer ? "Correct" : "Incorrect"; if (result == "Correct") { _correctAnswerCount++; } // 注意这里插入数据库时,要用_correctAnswerCount作为numberOfCorrectAnswers的值 string query = "INSERT INTO studentAnswers (studentId, qSet, teacherId, question, studentAnswer, correctAnswer, result, numberOfCorrectAnswers) " + "VALUES (@studentId, @qSet, @teacherId, @question, @studentAnswer, @correctAnswer, @result, @numberOfCorrectAnswers)"; // 记得用参数化查询绑定值,避免SQL注入 // 示例参数绑定(根据你的数据库操作框架调整) // command.Parameters.AddWithValue("@numberOfCorrectAnswers", _correctAnswerCount); // ... 后续数据库执行代码 }
额外注意事项
- 要确保
currentQSet和correctAnswer、studentId这些变量能正确获取到当前题集、正确答案和学生ID,不然逻辑还是会出错 - 如果你的应用是多线程环境(比如同时处理多个学生答题),还需要考虑线程安全问题,可以加锁或者用线程安全的变量类型;如果是单学生的单进程场景,上面的改法就足够了
- 一定要用参数化查询,别直接拼接SQL字符串,这能有效防止SQL注入攻击
备注:内容来源于stack exchange,提问作者Tharuka Dilshan
相关产品推荐
相关产品推荐

