程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 事務(Transaction) 之分布式事務TransactionScope,原子性

事務(Transaction) 之分布式事務TransactionScope,原子性

編輯:C#入門知識

事物(Transaction)是訪問並可能更新數據庫中各種數據項的一個程序執行單元(unit)。事物通常由高級數據庫操縱語言或編程語言(如SQL,C++或Java)書寫的用戶程序的執行所引起,並用形如begin transaction和commit transaction

或 rollback transaction語句(或回調函數)來界定。事物由事務開始(begin transaction)和事務結束(committransaction或 rollback transaction)之間執行的全體操作組成。SQL Server中事務語句開始或結束時transaction可簡寫為tran.

 

事物應該具有4個屬性:原子性、一致性、隔離性、持續性。這四個屬性通常稱為ACID特性.

 

原子性(atomicity):     一個事務是一個不可分割的工作單位,事務中包括的諸操作要麼都做,要麼都不做。

 
一致性(consistency): 事物必須是使數據庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。
 
隔離性(isolation):       一個事物的執行不能被其他事務干擾。即一個事物內部的操作及使用的數據對並發的其他事務是隔離的,並發執行的各個事務之間不能互相干擾。
 
持久性(durability):     持續性也稱永久性(permanence),指一個事物一旦提交,它對數據庫中數據的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。


 

 

啟動服務
Distributed Transaction Coordinator(TrkWks)

添加引用
System.Transactions

引入命名空間
using System.Transactions;


編寫代碼

 

static void Main(string[] args) 
        { 
            //分布式事務(原子性,要麼全部成功,要麼全部失敗(回滾 →sql完成))  
            using (TransactionScope ts = new TransactionScope()) 
            { 
                //第一步  
                string sql = "select top 1 loginId from dbo.sys_user where pwd=@pwd;"; 
                SqlParameter[] param = { 
                                    new SqlParameter("@pwd", System.Data.SqlDbType.VarChar,16) { Value = "12" } 
                                   }; 
                Console.WriteLine(SqlHelper.ExecuteScalar(sql, param).ToString()); 
 
                //第二步  
                string _sql = "select top 1 loginId from dbo.sys_user where pwd=@pwd;"; 
                SqlParameter[] _param = { 
                                    new SqlParameter("@pwd", System.Data.SqlDbType.VarChar,16) { Value = "1" } 
                                   }; 
                Console.WriteLine(SqlHelper.ExecuteScalar(_sql, _param).ToString()); 
 
                //完成  
                ts.Complete(); 
            } 
            Console.ReadKey(); 
        } 
static void Main(string[] args)
        {
            //分布式事務(原子性,要麼全部成功,要麼全部失敗(回滾 →sql完成))
            using (TransactionScope ts = new TransactionScope())
            {
                //第一步
                string sql = "select top 1 loginId from dbo.sys_user where pwd=@pwd;";
                SqlParameter[] param = {
                                    new SqlParameter("@pwd", System.Data.SqlDbType.VarChar,16) { Value = "12" }
                                   };
                Console.WriteLine(SqlHelper.ExecuteScalar(sql, param).ToString());

                //第二步
                string _sql = "select top 1 loginId from dbo.sys_user where pwd=@pwd;";
                SqlParameter[] _param = {
                                    new SqlParameter("@pwd", System.Data.SqlDbType.VarChar,16) { Value = "1" }
                                   };
                Console.WriteLine(SqlHelper.ExecuteScalar(_sql, _param).ToString());

                //完成
                ts.Complete();
            }
            Console.ReadKey();
        }

 

ts.Complete();事物完成 
ts.Complete();事物完成

 

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