我正在用C#构建一个实现SQL Server 2012的GUI评分系统。当程序开始时,有一些标签可以控制程序的不同方面,例如添加,更新或删除记录;为所有或单身学生查看等级GridView;然后查看所有学生记录。现在我在一个名为StudentGrades的桌子中的1个单元格中拥有所有学生的成绩,它看起来像这样:
Student ID Student Grades
00001 100, 58, 72, 10, 25, 50, 93, 74, 30
00002 10, 40
00003 88, 60, 20, 45
正如你所看到的那样,并不是每个学生都有相同的成绩,所以我认为让所有成绩占据1个单元而不是有一个带有空单元格的桌子会更容易。
我想要完成的是当用户更新学生记录并添加新成绩时,我希望程序查询数据库并从StudentGrades表中选择StudentGrades,然后返回值。返回后,我想将新等级添加到结果中,然后使用新脚本更新数据库。有点像这样:
string select = "select StudentGrades from StudentGrades where Student_ID = inputStudentID";
SqlCommand command = new SqlCommand(select, conn);
SqlDataReader reader = command.ExecuteReader();
string temp = reader;
temp += "," + newStudentGrade;
//Script to update table here
这在Sql Server 2012和C#中是否可行?读表后读者会持有什么价值?
答案 0 :(得分:0)
直接更新您的数据库(如果没问题),如下所示:
UPDATE StudentGrades
SET [Student Grades] = [Student Grades] + @newgrade --do concatenation
WHERE Student_ID = @inputStudentID
并且,使用@newgrade
传递参数"," + newStudentGrade
。
答案 1 :(得分:0)
是的,这是一个非常糟糕的主意。您应该有另一个名为StudentGrade的表,其中包含StudentID外键,并且每个等级有一行,因此您可以正常插入/更新/删除它们。然后添加成绩就像INSERT INTO StudentGrade(StudentID, Grade) VALUES(x, y)
一样简单。
数据库列应该是原子的 - 每个字段中应该只有一个数据。忽视这条规则会导致痛苦和痛苦。你花时间尝试编写更新脚本而不是简单的INSERT
是第一个症状。它会从这里变得更糟。