,歡迎訪問網頁設計愛好者web開發。5.更新數據
web程序通常利用無程式語句或者通過參數代存儲過程來更新數據.但是,當遇見脫線的數據時,你也許希望利用內置服務來更新所有需要修訂的記錄.為完成這一工作.ado提供了成批的更新機制.
updatebatch 方法用于把保存在副本緩沖中的 recordset 更改發送到服務器,以更新數據源。它采用開放式鎖定,允許所有掛起的本地更改。它還在單個操作中把所有更改傳送到數據源。僅當更改提交后數據源鎖定要更改的記錄時,才會出現開放式鎖定。開放式鎖定使兩個用戶可以同時訪問同一個記錄,但一個用戶輸入的更改很快會被另一用戶所覆蓋。當然,這種方式要求數據源能夠檢測和防止數據沖突。還要求整個數據源比較穩定,不會發生頻繁的更改。否則,不難想象協調費用將很快超過替代嚴格鎖定所帶來的節約。事實上,使用 updatebatch 方法,在任何更改失敗時都會返回一個錯誤。然后,您可以通過 errors 集合和 error 對象來訪問該錯誤。
要理解 ado.net 模型為什么是更新數據的更強大的工具,理解 ado 中開放式鎖定的工作原理是非常關鍵的。在 ado 代碼中,您無法控制調用 updatebatch 之后所發生的一切。也就是說,更新是在服務器上通過滾動已更改的行,然后比較原始值和數據源中對應記錄中的當前值來進行的。當所有的值都一致了,才對表執行適當的 sql 語句(insert、update 或 delete)。
以上陳述說明了你還不能夠控制sql 語句。位于服務器端的更新 代碼既不會比你自己寫的好,也不會在你采用的非sql 提供程序的情況下運作。在本章節的開始部份,我已經講了web應用程序是典型的通過參數化存儲進程來更新數據的過程。不管如何,如果你用批更新,情況就會有所不同.
在ado.net中, 模型已被擴展開來.現在,它采用更為通用的架構,通過它你可以規定你自己關于基本運算的命令語句,如插入,刪除,更新以及選擇. 更明顯的,你可以觀察到從數據源里提取數據的企圖,并且不管數據源的本性,可以提供相同的支持.ado.net中的批更新,要求你創建一個datasetcommand 對象: sqldatasetcommand 或者adodatasetcommand
注: 在beta 2中, datasetcommand對象被稱為dataadapter 對象.
一旦你采用了datasetcommand對象,你可以使用它的update 方法. datasetcommand提供了一系列屬性:如insertcommand, deletecommand, updatecommand, and selectcommand.它們都是command對象,但你不能夠對它們進行設置,除非缺省設置沒有按你的要求完成.這與ado中一樣.在update過程中,如果沒有設置xxxcommand屬性,但是主關鍵字已經存在內,則會自動生成command對象.
以下代碼展示了如何為employeeslist table設置主關鍵字,
datacolumn[] keys = new datacolumn[1];
keys[0] = m_ods.tables["employeeslist"].columns["employeeid"];
m_ods.tables["employeeslist"].primarykey = keys;
主關鍵字基本上是是datacolumn對象的一個數組.
如果你想利用存儲過程來更新表單,或者你利用專用非sql 數據提供程序進行操作,那么你將會常常用到這 些命令屬性.