【问题标题】:Update using MySqlDataAdapter doesn't work使用 MySqlDataAdapter 更新不起作用
【发布时间】:2013-02-21 22:55:48
【问题描述】:

我正在尝试使用 MySqlDatAdapter 来更新 MySql 表。但是,表格永远不会更新!!!我以前这样做过,但使用的是 SQL 服务器。我的代码中是否还有其他特定于 MySql 的内容?

        DataTable myTable = new DataTable("testtable");

        MySqlConnection mySqlCon = new MySqlConnection(ConfigurationManager.ConnectionStrings["DBConStr"].ConnectionString);

        MySqlCommand mySqlCmd = new MySqlCommand("SELECT * FROM testtable WHERE Name = 'Tom'");
        mySqlCmd.Connection = mySqlCon;

        MySqlDataAdapter adapter = new MySqlDataAdapter(mySqlCmd);
        MySqlCommandBuilder myCB = new MySqlCommandBuilder(adapter);
        adapter.UpdateCommand = myCB.GetUpdateCommand();

        mySqlCon.Open();

        adapter.Fill(myTable);
        myTable.Rows[0]["Name"] = "Was Tom";
        myTable.AcceptChanges();
        adapter.Update(myTable);
        mySqlCon.Close();

谢谢

【问题讨论】:

    标签: c# mysql dataadapter


    【解决方案1】:

    更新前删除myTable.AcceptChanges()。否则,会将所有行 RowState 设置为 Unchanged,因此 DataAdapter 不会知道某些内容已更改。

    更新完成后adapter.Update(myTable)会自己调用AcceptChanges

    所以...

    myTable.Rows[0]["Name"] = "Was Tom";
    //myTable.AcceptChanges();
    adapter.Update(myTable);
    

    【讨论】:

    • @usp:这并不愚蠢,我认为很多人误解了AcceptChanges 的含义,因为它的名字暗示了更新之前需要的东西;)
    • 如果我不知道你是对的。但是我只是没有注意那行,因为我从其他使用带有 GridView 的 DataTable 的项目中复制了代码。无论如何,感谢您的帮助。
    【解决方案2】:

    我的一些人需要研究以下解决方案;在其他情况下,人们可能需要不同的解决方案。像这样在运行时调试时,甚至不要对 Datatable 进行任何操作,

    myTable.GetChanges(); // Return Any of Chnages Made without applying myTable.Accepchanges()
    myTable.GetChanges(DataRowState.Added); // Return added rows without applying myTable.Accepchanges()
    myTable.GetChanges(DataRowState.Deleted); 
    myTable.GetChanges(DataRowState.Detached);
    myTable.GetChanges(DataRowState.Modified);
    myTable.GetChanges(DataRowState.Unchanged);
    

    您可以根据上述命令获取数据。所以最好在将数据表传递给更新或插入或删除命令之前尝试调试。

    如果 myTable.GetChanges() 返回 null 那么您可以 SetAdded() 或 SetModified() 返回您的 DataTable;

    foreach(DataRow row in myTable.Rows)
    {
      row.SetAdded(); // For Insert Command
      row.SetModified(); // For Update Command
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-30
      • 1970-01-01
      相关资源
      最近更新 更多