如何解决即使更新语句不影响任何行,ExecuteNonQuery也会返回1
|| 我在这里面临一个非常奇怪的问题。 我的DAL使用OdbcConnection
对象编写,并且运行良好。
但是我必须尊重一些要求,因此不得不将系统移至使用“ 1”
您应该说不应该有任何问题。
但是,现在有一些误解:当我执行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行。即用户ID一行
,ExecuteNonQuery返回已更改的行数,即使该更改对于人类读者而言并不明显。该查询确实找到了匹配项,并且确实更新了一行。 SQL确实并没有过多地关注旧值,它只是覆盖了旧值,并将其视为一行的更改。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。