把更改寫回資料庫DataAdapter.Update
/**//*把更改寫回資料庫DataAdapter.Update*/
/**//*Important: 這種在DataTable中進行的插入、更新和刪除並不會自動寫回資料庫
*/
SqlDataAdapter adapter = new SqlDataAdapter(strSql, strConn);
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
DataSet ds = new DataSet();
adapter.Fill(ds, "Titles");
//插入記錄
DataTable table = ds.Tables["Titles"];
DataRow row = table.NewRow();
row["Title_id"] = "JP1001";
row["title"] = "programming Microsoft .NET";
row["price"] = 59.99m;
row["ytd_sales"] = 100000;
row["type"] = "business";
row["pubdate"] = new DateTime(2002, 5, 1);
table.Rows.Add(row);
//更新資料庫
adapter.Update(table);
/**//*DataAdapter的Update方法檢查傳遞給表的每一條記錄,把自從上次更新
* (或自從上次調用table的AcceptChanges方法後)被插入、更新或刪除的行
* 寫回資料庫。如果DataSet中包含了多個被修改的DataTable,就把整個DataSet
* 傳給Update方法: adapter.Update(ds),所有改變會被一次性寫回。
*/
/**//*
* 哦,還有許多示範DataAdapter.Update的用法的樣本,示範了通過調用名為GetChanges
* 的方法建立一個只含有被插入、更新或刪除行的新的臨時DataSet或者DataTable
* ,然後把delta傳遞給DataAdapter.Update,如下:
* //更新資料庫
* DataTable delta = table.GetChanges();
* adapter.Update(delta);
* 這種方法的確好用,但不是必需的。Update會忽略包含已修改和未修改的行的DataTable中
* 未被修改的行。
* 當要控制寫回資料庫中的更改的內容的順序時,GetChanges方法發揮作用,
* 如果想在Insert前面執行Delete,以避免主鍵重複錯誤,應該這樣做:
*/
//DataRowState ---->enum System.Data.DataRowState
//DataRowState.Deleted---->the row was deleted
// using the row.Delete()
DataTable deletes = table.GetChanges(DataRowState.Deleted);
adapter.Update(deletes);
DataTable inserts = table.GetChanges(DataRowState.Added);
adapter.Update(inserts);
/**//*GetChanges的另一個用處是,
* 當更新不是在本地執行時,把機器間的資料轉送量減到最小,
* 只傳遞被改變的DataSet或DataTable比傳遞整個DataSet或DataTable更高效
*/