如何在不覆盖数据的情况下添加到表格单元格?

时间:2015-02-11 05:07:14

标签: c# mysql sql-server

我正在用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#中是否可行?读表后读者会持有什么价值?

2 个答案:

答案 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是第一个症状。它会从这里变得更糟。