1. 程式人生 > >dataset更新資料庫

dataset更新資料庫

dataset相關操作

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():將所有的dataRowRowstate更改為unchanged,因此也就沒有任何資料更新

或者更改為

   oleAdaper.Update(ds,ds.Tables[0].TableName);//  

   ds.AcceptChanges();  

順序顛倒一下,以便做其他用途

一個DataRow物件剛被建立之後其狀態是Detached,是孤立的一個存在,所以建立了DataRow之後在DataRow中的單元填充了資料後還要通過DataTable.Rows.Add(DataRow)方法將此DataRow新增到DataTableDataRow新增到DataTable, 這個DataRow的狀態就轉變為Added。當修改了這個DataRow後,這個DataRow狀態轉為Modified,當用DataRow.Delete()方法刪除DataRow後,DataRow狀態將轉為Deleted

,不過此行還存在在DataTable中的,只是狀態改變了,這時用DataTable.Rows.Count檢視行數,跟刪除前是一樣的。只有在呼叫了DataTable.Remove(DataRow)方法後,此DataRow才被從DataTable移除,狀態也回覆到Detached孤立狀態。

一旦呼叫了DataTable.AcceptChanges()方法後,所有的行將根據不同的狀態做不同的處理,AddedModifiedUnchanged將保留當前值,Deleted的行將從DataTable中移除,最後所有的行的狀態都置為Unchanged。當DataTable是從DataAdapter.FillDataSetDataTable)方法填充而形成的,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 不會在資料來源中刪除該行。