2016-10-14 28 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。」} –