2016-10-14 26 views
0
OleDbConnection connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=\"C:\\Users\\User\\Desktop\\New Microsoft Access Database.accdb\""); 
       OleDbDataAdapter DataAdapter = new OleDbDataAdapter("SELECT *from pinakas", connection); 

       DataTable pinakas_Table = new DataTable(); 
       DataAdapter.Fill(pinakas_Table); 

       MessageBox.Show(pinakas_Table.Rows[1]["Name"].ToString()); 

确定,以便此行显示我的第一行字段 “名称”的名称“George”。C#OleDB保存更改

 pinakas_Table.Rows[1]["Name"] = "John"; 

现在这行设置 “名称” 字段的值为 “约翰”

 pinakas_Table.AcceptChanges(); 
     DataAdapter.Fill(pinakas_Table); 
     MessageBox.Show(pinakas_Table.Rows[1]["Name"].ToString()); 

OK,现在我的应用程序显示名称 “John”!这意味着DataTable“pinakas_Table”得到了改变。

 DataAdapter.Update(pinakas_Table); 

但它从来没有保存到我的Access数据库。

+0

DataSet ds = new DataSet(); DataAdapter.Fill(ds); DataAdapter.Fill(ds); MessageBox.Show(ds.Tables [0] .Rows [1] [“Name”]。ToString()); ds.Tables [0] .Rows [1] [“Name”] =“John”; ds.AcceptChanges(); MessageBox.Show(ds.Tables [0] .Rows [1] [“Name”]。ToString()); DataAdapter.Update(ds.Tables [0]);//同样,当我用DataSet而不是DataTable。更改不提交 –

回答

0

Updating Data Sources with DataAdapters美国...

调用AcceptChangesDataSetDataTable,或DataRow将导致所有Original值的DataRow与对DataRowCurrent值覆盖。如果将标识该行的字段值修改为已修改,则在调用AcceptChanges后,Original值将不再与数据源中的值相匹配。在调用DataAdapterUpdate方法期间,每行都会自动调用AcceptChanges

通过调用pinakas_Table.AcceptChanges();修改后的行将被视为如果它的数据是从数据库中保持不变,所以DataAdapter.Update(pinakas_Table);会看到没有必要的行动为该行。不要拨打AcceptChanges()Update method成功后会为您拨打AcceptChanges()

+0

如果我不用“AcceptChanges”,则在使用DataAdapter更新时出现错误。 –

+0

什么是错误? – BACON

+0

{“在使用修改的行传递DataRow集合时,更新需要一个有效的UpdateCommand。”} –