什么是事務?
事務:是數據庫操作的最小工作單元,是作為單個邏輯工作單元執行的一系列操作;這些操作作為一個整體一起向系統提交,要么都執行、要么都不執行;事務是一組不可再分割的操作集合(工作邏輯單元);
事務的四大特性:
1 、原子性
事務是數據庫的邏輯工作單位,事務中包含的各操作要么都做,要么都不做
2 、一致性
事 務執行的結果必須是使數據庫從一個一致性狀態變到另一個一致性狀態。因此當數據庫只包含成功事務提交的結果時,就說數據庫處於一致性狀態。如果數據庫系統 運行中發生故障,有些事務尚未完成就被迫中斷,這些未完成事務對數據庫所做的修改有一部分已寫入物理數據庫,這時數據庫就處於一種不正確的狀態,或者說是 不一致的狀態。
3 、隔離性
一個事務的執行不能其它事務干擾。即一個事務內部的操作及使用的數據對其它並發事務是隔離的,並發執行的各個事務之間不能互相干擾。
4 、持續性
也稱永久性,指一個事務一旦提交,它對數據庫中的數據的改變就應該是永久性的。接下來的其它操作或故障不應該對其執行結果有任何影響。
1 // --事務-- 提交按鈕 2 protected void btn_Submit_Click(object sender, EventArgs e) 3 { 4 SqlConnection conn = CreateConnection(); 5 SqlCommand sqlCommand = new SqlCommand(); 6 conn.Open(); 7 //開始事務 8 SqlTransaction tran = conn.BeginTransaction(); 9 /*------把連接對象conn和事務對象tran賦給sqlCommand對象的連接屬性、事務屬性------*/ 10 sqlCommand.Connection = conn; 11 sqlCommand.Transaction = tran; 12 /*------------------------------------------------------------------------------*/ 13 try 14 { 15 sqlCommand.CommandText = "update student set Address=N'北京' where No=1"; //注意添 N ,否則顯示‘??’ 16 sqlCommand.ExecuteNonQuery(); 17 sqlCommand.CommandText = "update student set Address=N'鄭州' where No=2"; 18 sqlCommand.ExecuteNonQuery(); 19 //使用Commit()方法提交事務 20 tran.Commit(); 21 Label1.Text = "事務提交成功!"; 22 }catch(Exception ex) 23 { 24 tran.Rollback(); //-----回滾事務---- 25 Label1.Text = "事務提交失敗:" + ex.Message; 26 } 27 finally 28 { 29 sqlCommand = null; 30 conn.Close(); 31 conn = null; 32 } 33 }
