dapper c#返回发现的行不受影响的行

afr*_*ose 4 c# mysql dapper

我有一个简单的存储过程,它在表上进行更新。

CREATE PROCEDURE `test_v1`(
out v_changed_rows int
)
BEGIN
    update mytable
    set color = 'green'
    where id = 964291; 
    set v_changed_rows= ROW_COUNT();
END
Run Code Online (Sandbox Code Playgroud)

从 mysql 工作台调用这个存储过程会得到正确的行影响(即第一次它将返回 1,因此返回 0,因为我用相同的值更新它,因此没有变化)

在此处输入图片说明

当我从 C# 调用这个存储过程时,问题就出现了 在此处输入图片说明

我尝试在for循环中调用此查询,并且每次返回1. 如何获取受查询影响的行,而不是查询找到的行?谢谢。

Cod*_*ler 6

ROW_COUNT() 函数有这样的注释:

对于 UPDATE 语句,默认情况下受影响的行值是实际更改的行数。如果在连接到 mysqld 时为 mysql_real_connect() 指定 CLIENT_FOUND_ROWS 标志,则受影响的行值是“找到”的行数;也就是说,由 WHERE 子句匹配。

虽然它说默认情况下返回实际更改的行数,但对于 MySql .Net 客户端,默认行为是返回与 WHERE 子句匹配的行数。这应该是由于client_flag传递给mysql_real_connect的参数值所致。

您可以通过在连接字符串中显式设置UseAffectedRows来更改此行为True

服务器=本地主机;用户ID=测试;密码=测试;数据库=测试;UseAffectedRows=True

我已经尝试过,它在 ADO.NET 和 Dapper 上都可以正常工作。