使用ADO.NET配置SQL Server交易處理

來源:互聯網
上載者:User

ADO.NET提供了處理後台資料所需要的一切功能,並且使用起來就如同從一張表格中讀取一個資料那樣簡單。交易處理transaction)允許你把資料庫操作歸為一組,由此來保證所有的操作都能夠執行。因為一旦其中的一項操作執行失敗,則整個交易處理都會失敗。現在讓我們來看看在.NET Framework下是如何使用交易處理的。

交易處理概況

交易處理是把一組操作合并為一個邏輯上的工作單元。在系統中沒有出現錯誤的情況下,開發人員可以使用交易處理來控制並保持交易處理中每一個動作的連續性和完整性。

使用這樣的方法可能導致向兩個極端情況發展:要麼在交易處理中的所有操作都得到執行,要麼沒有任何操作得到執行。這樣的方法對於即時應用程式來說非常必要。

銀行業務是一個範例。交易處理應當包括從一個帳戶到另一帳戶的轉帳過程。這一過程屬於交易處理,原因是從某帳戶中支出和在另一帳戶存入兩個動作必須被作為一個整體來執行——任何一方都不允許失敗。在深入研究ADO.NET編程之前,讓我們先來看看在SQL中是如何進行交易處理的。

SQL交易處理

SQL允許開發人員使用兩個簡單的聲明來使用交易處理:

Begin Transaction 啟動交易處理) 

Commit Transaction 提交交易處理)

在兩條聲明中的所有語句都成為交易處理的一部分。命令Begin Transaction位於整個交易處理的起始位置,因此其後的所有命令只有在執行到命令Commit Transaction時才會被一併執行。ADO.NET方法就這麼簡單。

ADO.NET交易處理

交易處理需要一個資料庫連接以及一個交易處理對象。在SQL Server和ADO.NET中使用交易處理的痛點在於SqlTransaction類。此類名稱隨所使用的資料庫平台的不同而會有一些變化。例如,對於OLEDB資料庫來說,交易處理類名為OleDbTransaction。

System.Data.SqlClient namespace包括了SqlTransaction類。此類包括了兩個屬性:

◆Connection:指示同交易處理相關聯的SqlConnection對象; 

◆IsolationLevel:定義交易處理的IsolationLevel。

屬性IsolationLevel是包括如下成員的枚舉對象:

◆Chaos:從高度獨立的交易處理中出現的pending changes不能被覆蓋; 
◆ReadCommitted:當資料需要被非惡意讀取時,採用共用鎖定定shared locks),但資料仍然可以在交易處理結束時被更新,這造成了非重複性的資料讀取nonrepeatable reads)或phantom data的產生; 
◆ReadUncommitted:惡意讀取資料是可能發生的,這表示沒有使用共用鎖定定shared locks),並且沒有實現獨佔鎖定exclusive locks); 
◆RepeatableRead:鎖定查詢中所用到的所有資料,由此避免其他使用者對資料進行更新。在phantom rows仍然可用的狀態下,這可以避免非重複性的資料讀取nonrepeatable reads); 
◆Serialisable:在DataSet中進行範圍鎖定,由此防止其他使用者在交易處理結束之前更新資料或在資料庫中插入行; 
◆IsolationLevel定義鎖定記錄的層級,但這一概念不在本文論述範圍之內。對象SqlTransaction也提供了類似的方法。你可以使用以下方法來進行交易處理; 
◆Commit:提交資料庫交易處理;  
◆Rollback:從未決狀態pending state)反轉roll back)交易處理。交易處理一旦被提交後即不能執行此操作; 
◆Save:在交易處理中建立savepoint可以對交易處理的一部分進行反轉,並且指定savepoint名稱。

以下的C#樣本將這些部分綜合起來。

這一簡單的控制台程式將通過以下步驟將兩行插入到Northwind資料庫的表格中:

調用Connection對象的BeginTransaction方法以標記交易處理的起始位置。BeginTransaction方法對交易處理返回了一個座標reference),此座標被指定給交易處理所用到的Command對象。

將Transaction對象指定給將要執行的Command的Transaction屬性。如果某Command在活動Transaction中的Connection上被執行,並且Transaction對象還沒有被指定到Command的Transaction屬性,則會產生一個異常。

調用Transaction對象的Commit方法來結束交易處理,或者調用Rollback方法來取消交易處理。

等價的VB.NET代碼與之類似。

交易處理結束

儘管這是一個簡單的樣本,但它還是充分顯示了在.NET應用程式中使用交易處理是多麼的簡單。請記住,交易處理只有在處理一組命令時才是必要的。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.