我正在尝试使用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();
由于
答案 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
}