0

我有一个四类学生,课程,注册和更新分数

在学生课上:

        public class Student
{
    public string studID  { get; set; }
    public string name { get; set; }

    public Student() { }

    public Student(string StudID,string Name)
    {
        this.studID = StudID;
        this.name = Name;
    }
}

在课程中

    public class Course
{
    public string courseID { get; set; }
    public string title { get; set; }
    public int credits { get; set; }

    public Course()
    {

    }

    public Course(string CourseID, string Name, int Credits)
    {
        this.courseID = CourseID;
        this.title = Name;
        this.credits = Credits;
    }
}

在注册班

     public class Registration 
{
    public Student studentData { get; set; }
    public Course courseData { get; set; } 
    public DateTime DOEnroll { get; set; } 

    public Registration ()
    {
    }

    public Registration (Student sData, Course cData, DateTime doe)
    {
        this.studentData = sData;
        this.courseData = cData;
        this.DOEnroll = doe;

    }

}

在 UpdateScore 类中

    public class UpdateScore 
{
    public Registration enrollData { get; set; }
    public int score { get; set; }

    public UpdateScore () { }

    public UpdateScore (Registration enrData, int sco)
    {
        this.enrollData = enrData;
        this.score = sco;
    }
}

现在我正在使用此查询进行更新,但在 studentID 和 CourseID 中显示空数据

代码是:

     public static void Update(UpdateScore score)
    {
        SqlConnection conn = DB.GetConnection();

        try
        {
            conn.Open();
            string selectStm = "UPDATE EnrollmentTable set Score = @Score where StudentID = @StudentID AND  CourseID = @CourseID";

            SqlCommand command = new SqlCommand(selectStm, conn);

            SqlParameter param1 = new SqlParameter();
            SqlParameter param2 = new SqlParameter();
            SqlParameter param3 = new SqlParameter();

            param1.ParameterName = "@StudentID";
            param2.ParameterName = "@CourseID";
            param3.ParameterName = "@Score";


            Student st = new Student();
            Course cr = new Course();

            Registration enr = new Registration ();

            enr.courseData = cr;
            enr.studentData = st;
            score.enrollData = enr;

            param1.Value = st.studID ;
            param2.Value = cr.courseID;
            param3.Value = score.score;


            command.Parameters.Add(param1);
            command.Parameters.Add(param2);
            command.Parameters.Add(param3);



            int i = command.ExecuteNonQuery();
        }
        catch (SqlException ex)
        {
            throw ex;
        }
        finally
        {
            conn.Close();//Close Connection
        }

    }

它给了我这个例外

参数化查询“(@StudentID nvarchar(4000),@CourseID nvarchar(4000),@Score int)U”需要未提供的参数“@StudentID”。

您能告诉我如何获取 StudentID 和 CourseID 中的值吗?

4

2 回答 2

1

您不应该在参数名称本身中有@。改变

param1.ParameterName = "@StudentID";
param2.ParameterName = "@CourseID";
param3.ParameterName = "@Score";

param1.ParameterName = "StudentID";
param2.ParameterName = "CourseID";
param3.ParameterName = "Score";

还,

  • 您捕获异常只是为了再次抛出它。不要捕获一个你不会做一些有用的事情的异常。
  • 使用using关键字比在finally块中手动关闭连接更简洁。
于 2012-08-11T00:30:31.060 回答
0

埃里克对你的问题给出了正确的解释。我想指出另一个问题。

在您的学生班级中,您稍后分配给 param1.Value 的自动属性 ​​studID 是一个字符串。C# 中的字符串是对象,因此它们的默认值为 null。您的更新代码没有为 studID 分配任何值,因此当您将其分配给 param1.Value 时,实际上是在将 null 分配给 param1.Value。这可能不是你想要的。

与 CourseID 相同。

假设您在 Update 方法中收到的 UpdateScore 已按照对象模型的建议正确构造了其中的所有数据,则不应创建新的 Student 或 Course 对象。相反,做类似的事情

param1.Value = score.enrollData.studentData.studID;

以及其他信息的类似内容。

继续编码!

注意:这看起来很像家庭作业,因此您还应该借此机会考虑一下代码在做什么,还可以使用调试器运行它以查看如何分配值等。我已经概述了一些帮助,但我不会t为你做你的全部工作:-)

于 2012-08-11T00:31:37.857 回答