5

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

谢谢

4

2 回答 2

7

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

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

所以...

myTable.Rows[0]["Name"] = "Was Tom";
//myTable.AcceptChanges();
adapter.Update(myTable);
于 2013-03-06T22:31:41.957 回答
1

我的一些人需要研究以下解决方案;在其他情况下,人们可能需要不同的解决方案。像这样在运行时调试时,甚至不要对 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
}
于 2013-07-06T17:44:43.250 回答