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():將所有的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.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 不會在資料來源中刪除該行。