.NET中事務操作小結(1)

iDotNetSpace發表於2009-03-11

在進行資料庫操作的過程中,需要通過一種機制來保證資料的完整性,即稱為事務

基本的事務必須從屬4個特點ACID(Atomicity,Consistency,Isolation and Duiability),即原子性,一致性,獨立性,永續性,總體特點說明如下:

Atomicity(原子性):在一個操作中涉及兩個或兩個以上獨立的資訊,這些資訊要麼全部提交,要麼都不提交

Consistency(一致性):操作要麼建立新的有效的資料狀態,要麼(如果發生錯誤下)將所又的資料返回到初始狀態

Isolation(獨立性):操作在沒有提交併不與其他操作發生任何關係

Duiability(永續性):即使操作過程中發生了錯誤需要重新啟動,儲存的已經提交的資料在正確的狀態下任然有效

。NET事務主體主要分成兩種情況:手動事務和自動事務

。NET目前提供了三種事務機制:

(1)在SQL中使用事務

(2)在ADO.NET中使用事務

(3)分散式事務(Com+事務)—主要用於自動事務控制


--------------------------------------------------------------------------------

A:在SQL中使用事務

關鍵字:Begin Trans,Commit Trans,RollBack Trans實現,這種方式最為簡單

--在SQL中使用事務
begin Trans
declare @orderError int,@productError int
delete from OrderList where id=45
select @orderError=@@Error

delete from ProductList where id=44
select @productError=@@Error

if(@orderError==0 and @productError==0)
commit Trans
else
RollBack Trans
//在SQL使用最為簡單 不做過多介紹
B:在ADO.NET中使用事務:

在ADO.net中主要通過Transaction物件來實現事務的基本處理。

SqlConnection和OledbConnection物件有一個BeginTransaction方法,該方法返回一個SqlTransaction或者OleDBTransaction物件,而這兩個物件中Commit和RollBack方法來管理事務處理。很簡便明瞭

其中在ADO.net主要特點是:

優點是:

(A)操作簡單(主要是物件幾個方法)和資料庫事務差不多

(B)獨立於資料庫 不同資料庫專有程式碼被隱藏了

缺點是:

(A)事務不能跨多個資料庫連線(分散式事務可以跨多個資料庫)

(B)事務執行必須依靠一個存在的資料庫連線,從Transaction物件生成就可以看出通過SqlConnection或OleDBConnection物件獲得。

(C)ADO.net中分散式事務可以跨多個資料庫,如果其中一個是SQLServer資料庫的話,通過SQLserver連線伺服器連線別的資料庫,但如果是DB2和Oracle之間就不行。如下例項程式碼:

--在ADO.net中新增事務
--連線字串已知conStr

using(SqlConnenction getCon=new SqlConnection(conStr))
{
   //open Connection
   getCon.open();
   //宣告一個SqlTransaction
   SqlTransaction getTran=getCon.BeginTransaction();
   SqlCommand getCmd=new SqlCommand();
   getCmd.Connection=getCon;
   //定義命令操作事務
   getCmd.Transaction=getTran;
  
   //通過一個Try-Catch
   try
   {
     //執行第一條SQL語句
     getCmd.CommandText="insert into OrderList('德國柏林')";
     getCmd.ExecuteNonQuery();
     //執行第二條SQL語句
      getCmd.CommandText="delete from OrderList where id=1425";
     getCmd.ExecuteNonQuery();
     //若沒有異常提交事務
      getTran.Commit();
   }catch(Exception ce)
   {
    //出現異常 事務回滾
     getTran.RollBack();
   }finally
   {
    //關閉資料庫連線 使用了Using快就不需要了
    // getCom.close();
   }
   
  
}
 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-566855/,如需轉載,請註明出處,否則將追究法律責任。

相關文章