2014-12-13 78 views
-1

我有一個名爲主題的表格。我想更新教師,課程和科目。用戶選擇程序,然後選擇相應的教師,然後選擇相應的科目。不,當我更新記錄時,只有兩個檔案正在更新,但只有一個主題正在更新重新編制。我的代碼更新的字段如下:爲什麼將查詢(下面給出)結果寫入無行?

string SQLString2 = ""; 
      OleDbCommand SQLCommand = new OleDbCommand(); 
      foreach (var item in checkedListBox1.CheckedItems) 
      { 
       foreach (string subName in (item.ToString().Split('+'))) 
       { 
        SQLString2 = "UPDATE subjects SET program = '" + program + "', faculty = '" + faculty + "', subjectN = '" + subName + "' WHERE RollNo = " + rollNumber + " AND regYear = " + regNumber + " AND program = '" + this.comboBox1.SelectedItem.ToString() + "' AND faculty = '" + this.comboBox2.SelectedItem.ToString() + "'"; 
        SQLCommand.CommandText = SQLString2; 
        SQLCommand.Connection = database; 
        int response2; 
        try 
        { 
         response2 = SQLCommand.ExecuteNonQuery(); 
        } 
        catch (Exception ex) 
        { 
         MessageBox.Show(ex.Message); 
        } 
       } 
      } 

學院和程序被成功更新,但主題被更新爲這樣的:

English 
English 
English 
English 
English 

是我的查詢嗎?如果您更新受西班牙,然後到法國,然後到英國
好以後所有的主題

+2

'subName'的值是什麼?你確定它不是空字符串嗎?你調試了你的代碼嗎?你是否首先在數據庫管理器中嘗試了你的命令?它在那裏工作嗎?並始終使用[參數化查詢](http://www.codinghorror.com/blog/2005/04/give-me-parameterized-sql-or-give-me-death.html)。這種字符串連接對於[SQL注入](http://en.wikipedia.org/wiki/SQL_injection)攻擊是開放的。國際海事組織,'SQLCommand'不是一個好的變量名作爲'OleDbCommand'。同樣使用'using'語句來處理你的數據庫連接和對象。 – 2014-12-13 15:54:15

+1

你的問題沒有意義。如果ExecuteNonQuery返回0,則不更新行。 BTW:通過不使用參數,您的查詢容易受到SQL注入攻擊。 – 2014-12-13 15:56:44

+0

在調試中,我可以看到預期的值。但是每個科目只有'英文'正在更新。 – Sameer 2014-12-13 16:03:07

回答

1

所以=英語
而對於計劃和教職員工你只是其更改爲同樣的事情每次循環

在迴應 - 如果它返回0,那麼我會相信嗎
我懷疑你沒有正確評估的事情

這將是更有效的(並且你在做什麼)

foreach (var item in checkedListBox1.CheckedItems) 
{ 
    foreach (string subName in (item.ToString().Split('+'))) 
    { 
     SQLString2 = "UPDATE subjects SET program = '" + program + "', faculty = '" + faculty + "', subjectN = '" + subName + "' WHERE RollNo = " + rollNumber + " AND regYear = " + regNumber + " AND program = '" + this.comboBox1.SelectedItem.ToString() + "' AND faculty = '" + this.comboBox2.SelectedItem.ToString() + "'";   
    } 
    SQLCommand.CommandText = SQLString2; 
    SQLCommand.Connection = database; 
    int response2; 
    try 
    { 
     response2 = SQLCommand.ExecuteNonQuery(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 
+0

是的,我會仔細研究它。 – Sameer 2014-12-13 18:29:00

+0

請在這裏檢查我的問題。 http://stackoverflow.com/questions/27467545/how-to-perform-update-operation-on-two-tables-having-two-similar-fields-and-one – Sameer 2014-12-14 10:22:13

+0

請檢查我對這個問題的答案。 – Paparazzi 2014-12-14 13:30:19