0

Student、Course、Registration、UpdateScoreの4つのクラスがあります

StudentClass で:

        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;
    }
}

In CourseClass

    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 に null データが表示されます

コードは次のとおりです。

     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";

また、

  • 例外をキャッチして、再度スローするだけです。役に立たない例外をキャッチしないでください。
  • finallyブロックで接続を手動で閉じるよりも、 usingキーワードを使用する方がクリーンです。
于 2012-08-11T00:30:31.060 に答える
0

エリックはあなたの問題について正しい説明をしました。別の問題を指摘したい。

クラス Student では、後で param1.Value に割り当てる autoproperty スタッド ID は文字列です。C# の文字列はオブジェクトであるため、既定値は null です。更新コードはスタッド ID に値を割り当てないため、それを param1.Value に割り当てると、実際には null が param1.Value に割り当てられます。これはおそらくあなたが望むものではありません。

CourseID についても同様です。

Update メソッドで受け取る UpdateScore が、オブジェクト モデルによって提案されているように、内部のすべてのデータで適切に構築されていると仮定すると、新しい Student または Course オブジェクトを作成しないでください。代わりに、次のようなことをしてください

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

他の情報についても同様です。

コーディングを続けてください!

注: これは宿題のように見えるので、この機会にコードが何をしているのかを考えたり、デバッガーで実行して値がどのように割り当てられるかを確認したりする必要があります。 tはあなたのためにあなたのすべての仕事をします:-)

于 2012-08-11T00:31:37.857 に答える