DataTable.AcceptChanges的理解


OleDbDataAdapter 怎么更新不了數據庫?
 
   String    tbName    =    ds.Tables[0].TableName;   
   String    tem    =    ds.Tables[0].Rows[0]["BOMID"].ToString();   
   DataRow    dr    =    ds.Tables[0].NewRow();   
   dr["BOMID"]    =    "104";   
   dr["Quantity"]    =    10;   
   ds.Tables[0].Rows.Add(dr);   
    
   ds.AcceptChanges();   
    
   oleAdaper.Update(ds,ds.Tables[0].TableName);//這里不就是更新數據庫嗎?
 
   刪掉ds.AcceptChanges();就行了。   
   這是為什么呢?
 
   oleAdaper.Update    :對dataRow    的RowState等於deleted/inserted/updated調用響應的delete等    command進行更新   
   ds.AcceptChanges():將所有的dataRow的Rowstate更改為unchanged,因此也就沒有任何數據更新
 
   或者更改為
 
   oleAdaper.Update(ds,ds.Tables[0].TableName);//   
   ds.AcceptChanges();   
 
   順序顛倒一下,以便做其他用途
 
一個DataRow對象剛被創建之后其狀態是Detached,是孤立的一個存在,所以建立了DataRow之后在DataRow中的單元填充了數據后還要通過DataTable.Rows.Add(DataRow)方法將此DataRow添加到DataTable,DataRow添加到DataTable后, 這個DataRow的狀態就轉變為Added。當修改了這個DataRow后,這個DataRow狀態轉為Modified,當用DataRow.Delete()方法刪除DataRow后,DataRow狀態將轉為Deleted,不過此行還存在在DataTable中的,只是狀態改變了,這時用DataTable.Rows.Count查看行數,跟刪除前是一樣的。只有在調用了DataTable.Remove(DataRow)方法后,此DataRow才被從DataTable移除,狀態也回復到Detached孤立狀態。
 
一旦調用了DataTable.AcceptChanges()方法后,所有的行將根據不同的狀態做不同的處理,Added、Modified、Unchanged將保留當前值,Deleted的行將從DataTable中移除,最后所有的行的狀態都置為Unchanged。當DataTable是從DataAdapter.Fill(DataSet,DataTable)方法填充而形成的,Fill()方法將自動調用AcceptChanges()方法,將DataTable的行狀態都置為Unchanged。並且,如果Fill方法中指定的那個DataTable在要填充的那個DataSet不存在時,會生成一個跟數據源表同樣的結構的DataTable並填充數據
 
用於從 DataTable 對象中刪除 DataRow 對象的方法有兩種:DataRowCollection 對象的 Remove 方法和 DataRow 對象的 Delete 方法。Remove 方法從 DataRowCollection 中刪除 DataRow,而 Delete 方法只將行標記為刪除。當應用程序調用 AcceptChanges 方法時,才會發生實際的刪除。通過使用 Delete,您可以在實際刪除之前先以編程方式檢查哪些行標記為刪除。如果將行標記為刪除,其 RowState 屬性會設置為 Deleted。
 
在將 DataSet 或 DataTable 與 DataAdapter 和關系型數據源一起使用時,用 DataRow 的 Delete 方法移除行。Delete 方法只是在 DataSet 或 DataTable 中將行標記為 Deleted,而不會移除它。而 DataAdapter 在遇到標記為 Deleted 的行時,會執行其 DeleteCommand 方法以在數據源中刪除該行。然后,就可以用 AcceptChanges 方法永久移除該行。如果使用 Remove 刪除該行,則該行將從表中完全移除,但 DataAdapter 不會在數據源中刪除該行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM