事務就是真實世界中的一些事件,比如銀行事務,航班預定,資金匯寄等。
事務是一組被當作一個單元執行的操作。它在執行時要么全部成功,要么全部失敗。
事務有四個屬性,常稱為ACID。原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。
1.原子性:整個事務中的所有操作,要么全部完成,要么全部不完成,不可能停滯在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。
2.一致性:在事務開始之前和事務結束以后,數據庫的完整性約束沒有被破壞。
3.隔離性:隔離狀態執行事務,使它們好像是系統在給定時間內執行的唯一操作。如果有兩個事務,運行在相同的時間內,執行相同的功能,事務的隔離性將確保每一事務在系統中認為只有該事務在使用系統。這種屬性有時稱為串行化,為了防止事務操作間的混淆,必須串行化或序列化請求,使得在同一時間僅有一個請求用于同一數據。
4.持久性:在事務完成以后,該事務所對數據庫所作的更改便持久的保存在數據庫之中,并不會被回滾。
ADO.NET中簡單的事務處理:
using (SqlConnection conn = new SqlConnection(GetConnection())) { conn.Open(); //啟動一個事務 using (SqlTransaction transaction = conn.BeginTransaction()) { using (SqlCommand cmd = conn.CreateCommand()) { try { cmd.Transaction = transaction; //為命令指定事務 cmd.CommandText = "INSERT INTO tb_user(UserId,UserName) VALUE('Id0002','Name0002');"; cmd.ExecuteNonQuery(); cmd.CommandText = "INSERT INTO tb_user(UserId,UserName) VALUE('Id0008','Name0008');"; cmd.ExecuteNonQuery(); transaction.Commit(); //事務提交 Response.Write("<script>alert('成功寫入記錄');</script>"); } catch (Exception ex) { transaction.Rollback(); //事務回滾 Response.Write(ex.Message); Response.Write("<script>alert('寫入記錄失敗');</script>"); } } } }
新聞熱點
疑難解答