【问题标题】:How to find out what was last change to SQL db?如何找出对 SQL db 的最后更改?
【发布时间】:2018-07-09 18:39:13
【问题描述】:

我有一个正在运行 UPDATE 查询的程序。出于测试目的,查询是固定的,只是UPDATE table SET field = 'field_name' WHERE other_field = 'id_field_value'。我正在使用MySqlCommand 并使用sqlCommand.ExecuteNonQuery() 执行查询。但是,我一遍又一遍地运行它,它每次都返回 1 行更改。正如预期的那样,在 MySQL GUI 工具中运行相同的查询会返回 0 行受影响。找出 sql db 发生了哪些变化的最佳方法是什么?

我的问题已被标记为重复 - 我不是在询问如何获取受 sql 查询影响的 # 行。我想知道当查询继续返回 1 行时,我希望它返回 0 时,如何找出对 sql 表进行了哪些更改。

没关系,我的问题在重复问题 (Get affected rows on ExecuteNonQuery) 的 cmets 中得到了回答。结果 ExecuteNonQuery() 不返回实际修改的行数,而只是返回可能已修改的行数。坦率地说,这没什么用处。

【问题讨论】:

  • 问题 SELECT field FROM table WHERE other_field = 'id_field_value'
  • 您可以更改更新中的过滤器以包含AND field <> 'field_name',基本上确保您不会重置相同的值。
  • @juharr 这是一个很好的解决方法,谢谢。

标签: c# mysql


【解决方案1】:

默认情况下,Connector/NET 中的 MySqlCommand.ExecuteNonQuery 返回找到的行数,无论它们是否已更新(即使 the documentation for DbCommand 说“对于 UPDATE、INSERT 和 DELETE 语句,返回值是受命令影响的行数”)。

要获得所需的行为,请在连接字符串 (reference) 中指定 UseAffectedRows=True,或设置 MySqlConnectionStringBuilder.UseAffectedRows = true;

【讨论】:

    猜你喜欢
    • 2016-06-26
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    相关资源
    最近更新 更多