为什么即使没有更新,ExecuteNonQuery也会返回1?

时间:2013-07-23 12:22:50

标签: c# mysql .net

我有一个类似的查询:

UPDATE messages SET Unread = 'N' WHERE id= '6'

要读取受影响的行,我使用ExecuteNonQuery()的值,但即使没有更改,它也始终返回1。看到同样的问题here。这是一个错误还是这种行为正常?

3 个答案:

答案 0 :(得分:7)

要让ExecuteNonQuery返回1必须一条记录WHERE id = '6'。现在,如果您只想更新该行,如果值不同,请更改查询:

UPDATE messages SET Unread = 'N' WHERE id = '6' AND Unread <> 'N'

如果您要运行该查询且Unread的值已经'N',那么它将返回0行。

答案 1 :(得分:5)

UPDATE 查询的ExecuteNonQuery()返回值是update语句的where子句匹配的行数, NOT 行数实际更新。所以它确实有意义..

请参阅this链接,您的所有疑问都将被清除。

答案 2 :(得分:1)

您应该使用连接字符串选项'使用受影响的行'。设置为true时,它将报告已更改的行而不是找到的行。

请参阅https://dev.mysql.com/doc/connector-net/en/connector-net-connection-options.html