c# - ExecuteNonQuery 返回 1,即使更新语句没有影响任何行

标签 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;
                }

最佳答案

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

关于c# - ExecuteNonQuery 返回 1,即使更新语句没有影响任何行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5660383/

相关文章:

c# - .Net 生成 CSV 文件

c# - 将 WM_GETFONT 与标准平面样式一起使用时出现问题

c# - 带有 ItemsControl 的网格中的 Gridsplitter

c# - BackgroundWorker 的 RunWorkerCompleted 被触发两次

.net - 如何序列化 EF POCO 自动生成的对象以避免循环引用?

c# - 发生基类虚方法隐藏时如何强制编译报错?

c# - 与 xp 上的 2010 相比,找不到引用的组件 'vbide'

mysql - 在互联网上公开本地 Docker 容器(有两个容器相互链接)。

mysql函数返回一个表

mysql - 有两个表的条​​件 Mysql 事件