我有一个名为主题的表格。我想更新教师,课程和科目。用户选择程序,然后选择相应的教师,然后选择相应的科目。不,当我更新记录时,只有两个档案正在更新,但只有一个主题正在更新重新编制。我的代码更新的字段如下:为什么将查询(下面给出)结果写入无行?
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
是我的查询吗?如果您更新受西班牙,然后到法国,然后到英国
好以后所有的主题
'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
你的问题没有意义。如果ExecuteNonQuery返回0,则不更新行。 BTW:通过不使用参数,您的查询容易受到SQL注入攻击。 – 2014-12-13 15:56:44
在调试中,我可以看到预期的值。但是每个科目只有'英文'正在更新。 – Sameer 2014-12-13 16:03:07