我在这里面临一个非常奇怪的问题。
我的DAL是使用OdbcConnection
个对象编写的,并且完美无缺。
但是我必须尊重某些要求,因此必须将系统移至MySqlConnection
不应该提出任何问题,你会说。
然而,现在有一点误会:当我执行UPDATE
命令时,没有输入任何新细节(假设我将用户“test”的用户名改为......“test”), command.ExecuteNonQuery()
无论如何都会返回1。
使用之前的系统& OdbcCommand
个对象,如果没有字段更改,则返回0。
这只是两个系统之间的基本区别还是我在这里错过了什么?
即使它是非常基本的代码,也只是一些代码:
private readonly string _updateUserCommand =
"UPDATE user u " +
"JOIN city c ON c.Name=?City " +
"SET `City Id`=c.Id, u.Username=?Username WHERE u.Id=?Id";
// (...)
MySqlCommand command = null;
try
{
connection.Open();
//First step: storing the user in table user
//Creating the actual command:
command = new MySqlCommand(_updateUserCommand, connection);
command.Parameters.AddWithValue("?City", u.City);
command.Parameters.AddWithValue("?Username", u.Name);
command.Parameters.AddWithValue("?Id", u.Id);
int i = command.ExecuteNonQuery();
if (i != 0) return true;
else return false;
}
答案 0 :(得分:0)
你的解释没有多大意义。如果您提供有效的ID并对用户名进行更新,即使您更新为相同的名称,您也可能会受到影响。即userId有一行
答案 1 :(得分:0)
ExecuteNonQuery返回它更改的行数,即使该更改对于人类读者来说并不明显。查询确实找到了一个匹配,它确实更新了一行。 SQL实际上并没有过多关注旧值是什么,它只是覆盖它并将其视为一行改变。