我正在用C#构建一个实现SQL Server2012的图形用户界面评分系统。当程序开始时,有一些选项卡控制程序的不同方面,例如添加、更新或删除记录;查看所有或单个学生的成绩GridView;然后查看所有学生记录。现在,我在一个名为StudentGrades的表中的一个单元格中包含了一个学生的所有成绩,它看起来像这样:
Student ID Student Grades
00001 100, 58, 72, 10, 25, 50, 93, 74, 30
00002 10, 40
00003 88, 60, 20, 45正如你所看到的,不是每个学生都有相同数量的成绩,所以我认为让所有的成绩占据一个单元格要比有一个包含空单元格的表格容易得多。
我试图完成的是,当用户更新学生记录并添加新成绩时,我希望程序查询数据库并从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 Server2012和C#中是否可行?在查询表之后,阅读器会持有什么值?
发布于 2015-02-11 14:22:32
只需直接更新数据库(如果没有问题),如下所示:
UPDATE StudentGrades
SET [Student Grades] = [Student Grades] + @newgrade --do concatenation
WHERE Student_ID = @inputStudentID并通过"," + newStudentGrade传递参数@newgrade。
发布于 2015-02-11 14:30:55
是啊,这真是个坏主意。您应该有另一个带有StudentID外键的名为StudentGrade的表,并且每个年级都有一行,这样您就可以正常地插入/更新/删除它们。然后添加一个等级就像INSERT INTO StudentGrade(StudentID, Grade) VALUES(x, y)一样简单。
数据库列应该是原子的-每个字段中应该只有一段数据。忽视这条规则会导致痛苦和痛苦。您正在花费时间尝试编写更新脚本而不是简单的INSERT,这是这种情况的第一个症状;从现在开始,情况会变得更糟。
https://stackoverflow.com/questions/28446986
复制相似问题