2015-02-11 59 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是這個的第一個症狀;它會從這裏變得更糟。

相關問題