使用MySqlDataAdapter更新不起作用

时间:2013-03-06 22:29:51

标签: c# mysql dataadapter

我正在尝试使用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();

由于

2 个答案:

答案 0 :(得分:7)

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

更新完成后,

adapter.Update(myTable)会自行调用AcceptChanges

因此...

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

答案 1 :(得分:0)

我的某些人需要研究以下解决方案;在其他情况下,人们可能需要不同的解甚至在运行时调试时不要对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
}