ADO.NET入門(5)

發表于:2007-05-25來源:作者:點擊數: 標簽:web程序ADO.NET更新入門
5.更新數據 Web程序通常利用無程式語句或者通過參數代存儲過程來更新數據.但是,當遇見脫線的數據時,你也許希望利用內置服務來更新所有需要修訂的記錄.為完成這一工作.ADO提供了成批的更新機制. UpdateBatch 方法用于把保存在副本緩沖中的 Recordset 更改發送
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 數據提供程序進行操作,那么你將會常常用到這 些命令屬性.

原文轉自:http://www.anti-gravitydesign.com

評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97