2015-12-02 67 views
1

我有一些學生的關係型ms-access數據庫。 (數據庫已經填充了一些數據) 我的數據庫中有兩張表: 1. tblStuInfo爲學生的一般信息。 2. tblStuEducation管理其年級和興趣每年c# - 獨立更新具有相同ID的ms-access數據庫記錄

命名

列 「StuID」 是tblStuInfo &在tblStuEducation外鍵 主鍵。

My database structure looks like this & example data looks like this

在我的窗體加載事件,動態文本框會自動在tblStuEducation表中每個記錄創建的,他們沒有問題,適當地填補。

我的問題是,當我編輯的一些信息(這裏假設只是EduYear)通過WinForm的,然後點擊保存,所有記錄都將得到相同的值(最後一個文本框)

這裏是我的保存按鈕代碼:

connection.Open(); 

OleDbCommand updateStuEducation = new OleDbCommand(); 
updateStuEducation.Connection = connection; 
readStuEducation.CommandText = "select * from tblStuEducation where stuID = 1000"; 

//textBoxNamesArray use LINQ to save all values from textboxes with txtEduYear in their name 
    string[] textBoxNamesArray = tabpEdu.Controls.OfType<TextBox>().Where(a => a.Name.Contains("txtEduYear")).Select(a => a.Text).ToArray(); 
    Int32 i = 0; 

    foreach (string value in textBoxNamesArray) 
    { 
     readStuEducation.CommandText = "update tblStuEducation set EduYear = '" + value[i] + "'"; 
     readStuEducation.ExecuteNonQuery(); 
     i++; 
    } 

    connection.Close(); 

我需要如下:

if i = 0 => value[0] Save in Row[0] of tblStuEducation where stuID = 1000. 
if i = 1 => value[1] Save in Row[1] of tblStuEducation where stuID = 1000. 
if i = 2 => value[2] Save in Row[2] of tblStuEducation where stuID = 1000. 

等等...

回答

0

我會做三個改變; 1)你需要一個WHERE子句 - 'update tblStuEducation set EduYear = x'將更新表中每條記錄的EduYear。

2)您在這裏有一個SQL注入漏洞;連接字符串以形成CommandText是不可接受的。你需要撥打readStuEducation.Parameters.Add()或類似的東西。 (閱讀this about parameters for OleDb

3)當您訪問value[i]時,看起來可能有些混淆;因爲value已經在適當的文本框中包含該值。值[i]將返回該字符串中的單個字符。

所以,你應該得到類似

readStuEducation.CommandText = "update tblStuEducation set Grade = ? where stuID = ? and EduYear = ?"; 
readStuEducation.AddParameter(value); // value to set 
readStuEducation.AddParameter(1000); // student ID 
readStuEducation.AddParameter(eduYear); // student ID 
readStuEducation.ExecuteNonQuery(); 
+0

謝謝你史蒂夫。但它仍然更新所有EduYear列的記錄,其中stuID = 1000並帶有最新的文本框值。我需要更新每一行的獨立年份值。 –

+0

然後,您可能需要WHERE子句中的另一個條件 - 我已經添加了一個作爲示例;這將爲某一年的特定學生設定分數。 –

+0

這正是我的問題。除了stuID,所有其他列可以有不同的值,因此條件可能會有所不同。我正在尋找解決方案來瀏覽更新查詢中的每一行。就像我們在使用DataReader while循環時一樣 –

相關問題