【问题标题】:How to add to a table cell without overriding the data?如何在不覆盖数据的情况下添加到表格单元格?
【发布时间】:2015-02-11 05:07:13
【问题描述】:

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

【问题讨论】:

  • 如果你规范化你的数据会更容易。
  • @wewestthemenace,我不确定这会如何使这更容易。我已经设置了主键和外键,并将我的数据拆分到不同的表中,以便更轻松地访问某些数据。

标签: c# mysql sql-server


【解决方案1】:

像这样直接更新你的数据库(如果没问题的话):

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

并且,将参数@newgrade"," + newStudentGrade 一起传递。

【讨论】:

    【解决方案2】:

    是的,这是一个非常糟糕的主意。您应该有另一个名为 StudentGrade 的表,其中包含 StudentID 外键,并且每个年级有一行,以便您可以正常插入/更新/删除它们。然后添加成绩就像INSERT INTO StudentGrade(StudentID, Grade) VALUES(x, y) 一样简单。

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

    【讨论】:

      猜你喜欢
      • 2016-03-30
      • 1970-01-01
      • 2022-12-06
      • 2014-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-12
      相关资源
      最近更新 更多