返回“ASP.NET 2.0數據教程目錄”
導言:
在前面的教程裡,我們考察了如何為SqlDataSource控件添加插 入、更新、刪除功能。簡而言之,就是為其nsertCommand, UpdateCommand和 DeleteCommd屬性賦以相應的INSERT,UPDATE和DELETESQL語句,並將相應的參數放 置在
<InsertParameters>, <UpdateParameters>和 <DeleteParameters>標簽裡。我們可以手工書寫這些代碼,也可以通過在 設置數據源向導裡單擊“高級”按鈕,選擇“自動生成INSERT, UPDATE和DELETE命令”,自動的生成語句。
在“高級SQL生成 選項”對話框裡有個“使用開放式並發”選項(見圖1)。當
選擇該項後,數據庫中的數據在自上一次成功保存以來沒發生任何改變的 情況下,才能成功地執行更新或刪除操作。
圖1:在“高級SQL生成選項”對話框添加開放式並發支持
在 Implementing Optimistic Concurrency教程路我們探討了開放式並發控制的基本 原理以及如何對ObjectDataSource控件使用開放式並發。在本教程我們看如何對 SqlDataSource控件使用開放式並發。
新的開放式並發
在一個允許 多人同時編輯或刪除相同數據的應用程序裡,有這種可能:一個人修改後的記錄 意外地被另一個人修改的記錄所覆蓋。在Implementing Optimistic Concurrency 這篇教程我們例舉過這樣的例子:
例如,假設兩個用戶,Jisun和Sam,都 訪問我們的應用軟件中的一個頁面,這個頁面允許訪問者通過一個GridView控件 更新和刪除產品數據。他們都同時點擊GridView控件中的Edit按鈕。Jisun把產品 名稱更改為“Chai Tea”並點擊Update按鈕,實質結果是向數據庫發 送一個UPDATE語句,它將更新此產品的所有可修改的字段(盡管Jisun實際上只修 改了一個字段:ProductName)。在這一刻,數據庫中包含有這條產品記錄 “Chai Tea”—種類為Beverages、供應商為Exotic Liquids、 等該產品的詳細信息。然而,在Sam的屏幕中的GridView裡,當前編輯行裡顯示的 產片名稱依舊是“Chai”。在Jisun的更改被提交後片刻,Sam把種類 更改為“Condiments”並點擊Update按鈕。這個發送到數據庫的 UPDATE語句的結果是將產品名稱更改為“Chai”、CategoryID字段的 值是種類Beverages對應的ID,等等。Jisun所作的對產品名稱的更改就被覆蓋了 。
圖2展示了這些連續的事件
圖2:當兩個用戶同時更新一條記錄,則存在一個用戶的更改覆蓋另一 個的更改的可能性