即使update语句不影响任何行,ExecuteNonQuery也返回1

时间:2011-04-14 08:17:39

标签: c# .net mysql

我在这里面临一个非常奇怪的问题。

我的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;
                }

2 个答案:

答案 0 :(得分:0)

你的解释没有多大意义。如果您提供有效的ID并对用户名进行更新,即使您更新为相同的名称,您也可能会受到影响。即userId有一行

答案 1 :(得分:0)

ExecuteNonQuery返回它更改的行数,即使该更改对于人类读者来说并不明显。查询确实找到了一个匹配,它确实更新了一行。 SQL实际上并没有过多关注旧值是什么,它只是覆盖它并将其视为一行改变。