程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET 2.0數據教程之六十三:在事務裡對數據庫修改進行封裝

ASP.NET 2.0數據教程之六十三:在事務裡對數據庫修改進行封裝

編輯:關於ASP.NET

返回“ASP.NET 2.0數據教程目錄”

導言:

正如我們在第16章《概述添加、更新、刪除數據》裡探討的那 樣,GridView控件內建的功能支持對每行數據的編輯和刪除功能,你只需要稍稍 動一下鼠標就可以創建豐富的數據修改界面而不用寫一行代碼.但是,在某些情況 下,這還不夠,我們需要讓用戶能夠成批地處理數據.

比如,很多基於 web(web-based)的電子郵件客戶端,將所有郵件出來,每條郵件除了包含郵件信 息(主題、發送者等)外,還包含一個checkbox控件。這些界面允許用戶同時刪除 多個郵件,用戶只需要選中郵件,再點"刪除所選郵件"按鈕.當用戶要 編輯多條不同的記錄的時候,提供一個批編輯界面是比較理想的.我們用不著讓用 戶每次都選中一條要編輯的記錄,再做相關的修改,最後點“更新” 按鈕,在批編輯界面裡每條記錄都有各自的編輯選項,用戶可以快速地編輯多條 記錄再點“Update All”按鈕來保存對他們所做的修改.本系列我們將 考察如何創建對數據進行添加、編輯、刪除批處理的界面.

如果想對批處 理執行atomic operation(原子操作), 那麼首先,所做的操作要麼都執行成功要 麼都失敗,另外還要對數據訪問層進行擴充以支持database transactions(數據 庫事務)。數據庫事務確保INSERT, UPDATE, 和 DELETE語句執行的atomicity(原 子數)置於數據庫事務的保護之下.另外,絕大多數的當代數據庫系統都支持數據 庫事務.

在本系列我們先看如何擴充數據訪問層以支持數據庫事務,接下 來我們看如何創建頁面以包含添加、更新、刪除數據的批處理界面,讓我們開始 吧.

注意:在批處理事務裡修改數據時,原子數(atomicity)並非總數必要 的。在批處理的某些情況下,某些修改成功某些修改失敗是可以接受的。比如刪 除電子郵件時,有些郵件在刪除過程中發生了數據庫錯誤,有些郵件沒有發生錯 誤,對這種沒有發生錯誤的郵件,批處理照樣將其刪除掉.對這種情況,我們沒有 必要設置數據訪問層DAL支持數據庫事務.不過在其它某些情況下,原子數是至關 重要的.比如某個客戶想把資金從一個銀行帳戶轉移到另一個銀行帳號,下面2個 操作必須執行成功:首先,將第一個帳號的資金扣除,然後將資金轉入第二個帳 號.如果第一步執行成功,第二步執行失敗,銀行當然高興,客戶怕是要發瘋了. 在後面的文章裡我們將創建添加、更新、刪除的批處理界面,就算你不打算在這 些頁面裡使用數據庫事務,我也希望你照著本篇文章,對數據訪問層進行擴展一 支持數據庫事務.

事務概述

絕大多數的數據庫都支持事務,它可以 將多個數據庫命令當成一個邏輯單位進行處理.這些包含事務的命令要麼都執行成 功要麼都執行失敗.

一般來說,事務通過SQL命令來執行,使用如下的模式 :

1.聲明事務開始

2.執行構成事務的那些SQL命令

3.如果 在第二步中的任何一個命令出錯,執行事務回滾(rollback the transaction)

4.如果在第二步中的所有命令成功執行,提交事務

這些SQL命令可 以通過手寫的方式輸入,比如寫SQL腳本、創建存儲過程、也可以通過編程的方式 來構建,比如使用ADO.NET技術或調用System.Transactions namespace命名空間 的類.在本文,我們僅僅考察用ADO.NET技術管理事務.在後面的教程我們看如何在 數據訪問層Data Access Layer裡使用存儲過程,到那時,我們再來考察這些創建 、回滾、提交事物的SQL命令。另外,要獲得更多信息請參考文章《Managing Transactions in SQL Server Stored Procedures》 (http://www.4guysfromrolla.com/webtech/080305-1.shtml)

注意: System.Transactions namespace命名空間的TransactionScope class類允許開發 者通過編程的方式獲取事務裡的一系列命令,且允許事務包含多個數據源,甚至 類型不同,比如:Microsoft SQL Server database, 或Oracle database,甚至 Web service.本教程我們使用ADO.NET技術而非TransactionScope class類,是因 為ADO.NET指定數據庫事務更詳細,且在很多情況下占用資源更少.此外,在某些 情況下,TransactionScope class類要用到Microsoft Distributed Transaction Coordinator (MSDTC),圍繞MSDTC的配置、執行和性能問題是比較專業、高級的 問題稍微超出了本教程的范圍.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved