2015-02-11 60 views
0

我正在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

如果对数据进行规范化处理会更容易。 – 2015-02-11 05:22:45

+0

@wewesthemenace,我不知道这将如何让这更容易。我已经设置了主键和外键,并将我的数据分成不同的表格,以便于访问某些数据。 – Wallatrixx 2015-02-11 05:31:55

回答

0

只需直接更新你的数据库(如果那也没问题)是这样的:

UPDATE StudentGrades 
SET [Student Grades] = [Student Grades] + @newgrade --do concatenation 
WHERE Student_ID = @inputStudentID 

而且,通过参数@newgrade"," + newStudentGrade

0

是的,这是一个非常糟糕的主意。你应该有另一个名为StudentGrade的表,并带有一个StudentID外键,并且每个年级有一行,因此你可以正常插入/更新/删除它们。然后添加一个等级将如INSERT INTO StudentGrade(StudentID, Grade) VALUES(x, y)一样简单。

数据库列应该是原子的 - 每个字段中应该只有一段数据。忽视这一规则会导致痛苦和痛苦。你花时间试图写一个更新脚本而不是简单的INSERT是这个的第一个症状;它会从这里变得更糟。

相关问题