【问题标题】:Force autoinc field with MySqlDataAdapter/MySqlCommandBuilder使用 MySqlDataAdapter/MySqlCommandBuilder 强制 autoinc 字段
【发布时间】:2015-05-28 23:21:55
【问题描述】:

通过 C# 和 MySQL ADO.NET 连接器,我使用 MySqlDataAdapter 和 MySqlCommandBuilder 更新表。

是否可以临时强制使用 autoinc 字段?

  DataRow row = ...
  row["Id"] = 90; // force autoinc value
  using (MySqlDataAdapter adapter = ...)
  {
    MySqlCommandBuilder builder = new MySqlCommandBuilder(adapter);
    int result = adapter.Update(new DataRow[] { row });
    // The inserted ID is 20 and not 90...

【问题讨论】:

    标签: c# mysql ado.net


    【解决方案1】:

    是的,您可以,只要您在提供的代码示例中明确指定值,它就会起作用。当然,如果指定了重复值,它将失败。

    仅当您省略该值或该值为 NULL、0 或 DEFAULT 时,自动增量才会应用于插入。

    【讨论】:

    • 不幸的是,正如您在上面的示例中看到的那样,它确实有效。 MySQL 使用自动增量字段中的下一个值...
    【解决方案2】:

    @A.Baudouin 我认为您的意思是“不幸的是,正如您在上面的示例中看到的那样,它确实不起作用”!你有没有找到解决办法?我遇到了完全相同的问题,但发现如果您使用 MySql Workbench 修改值,它可以正常工作。 Workbench 所做的只是一个普通的UPDATE 命令,所以我猜这是MySqlAdapter 的问题,或者可能是一个“功能”!我最终像这样直接更新数据库:

    MySqlHelper.ExecuteNonQuery(myConnection, "UPDATE MyTable SET Id = 90 WHERE Id = 7", null);
    

    (或者您想用 WHERE 标识正确的行)。这工作正常。

    【讨论】:

      猜你喜欢
      • 2014-10-04
      • 1970-01-01
      • 2012-09-20
      • 1970-01-01
      • 2011-01-30
      • 2020-12-17
      • 1970-01-01
      • 2015-02-16
      • 1970-01-01
      相关资源
      最近更新 更多