使用MySqlDataAdapter更新不工作

本文关键字:工作 更新 MySqlDataAdapter 使用 | 更新日期: 2023-09-27 18:02:43

我试图使用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();

谢谢

使用MySqlDataAdapter更新不工作

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

adapter.Update(myTable)将在更新完成后调用AcceptChanges

所以…

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

我的一些人需要看看下面的解决方案;在其他情况下,人们可能需要不同的解决方案。即使在运行时调试时也不要对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()回你的数据表;

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