2014-12-13 34 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

相关问题