1. 程式人生 > >net中的4種事務總結

net中的4種事務總結

在一個MIS系統中,沒有用事務那就絕對是有問題的,要麼就只有一種情況:你的系統實在是太小了,業務業務邏輯有隻要一步執行就可以完成了。因此掌握事務處理的方法是很重要,進我的歸類在.net中大致有以下4種事務處理的方法。大家可以參考一下,根據實際選擇適當的事務處理。
1 SQL事務
    sql事務是使用SQL server自身的事務:在儲存過程中直接使用Begin Tran,Rollback Tran,Commit Tran實現事務:
優點:執行效率最佳
限制:事務上下文僅在資料庫中呼叫,難以實現複雜的業務邏輯。
Demo:(所有demo,都以SQL Server自帶的Northwind資料的表Region為例)


CREATEPROCEDURE dbo.SPTransaction
    (
    
@UpdateIDint,
    
@UpdateValuenchar(50),
    
@InsertIDint,
    
@InsertValuenchar(50)
    )
AS
beginTran
Update Region  Set RegionDescription=@UpdateValuewhere RegionID=@UpdateID

insertinto Region Values (@InsertID,@InsertValue)

declare@RegionErrorint
select@RegionError
=@@error
if(@RegionError=0)
COMMITTran
else
ROLLBACKTran
GO
執行帶事務的儲存過程


2 ADO.net事務
   Ado.net事務可能是大家一般都用的
 優點:簡單,效率和資料庫事務差不多。
 缺點:事務不能跨資料庫,只能在一個數據庫連線上。如果是兩個資料庫上就不能使用該事務了。
Demo:


///<summary>
        
/// 一般的ADO.net 事務
        
///</summary>

publicvoid ADONetTran1()
        
{
            SqlConnection conn 
=new SqlConnection(
"Data Source=127.0.0.1;Initial Catalog=Northwind;Persist Security Info=True;User ID=sa;Password=123;");
            SqlCommand cmd 
=new SqlCommand();
            
try
            
{
                cmd.CommandText 
="Update Region Set [email protected] where [email protected]";
                cmd.CommandType 
= CommandType.Text;
                cmd.Connection 
= conn;
                conn.Open();
                SqlParameter[] paras 
=new SqlParameter[]{
                                        
new SqlParameter ("@UpdateID",SqlDbType.Int,32),
                                        
new SqlParameter ("@UpdateValue",SqlDbType .NChar,50)}
;
                paras[
0].Value ="2";
                paras[
1].Value ="Update Value12";

                
foreach (SqlParameter para in paras)
                
{
                    cmd.Parameters.Add(para);
                }

                
//開始事務
                cmd.Transaction = conn.BeginTransaction();
                cmd.ExecuteNonQuery();


                cmd.CommandText 
="insert into Region values(@InsertID,@InsertValue)";
                cmd.CommandType 
= CommandType.Text;

                paras 
=new SqlParameter[]{
                                        
new SqlParameter ("@InsertID",SqlDbType.Int ,32),
                                        
new SqlParameter ("@InsertValue",SqlDbType.NChar ,50)}
;
                paras[
0].Value ="7";
                paras[
1].Value ="Insert Value";

                cmd.Parameters.Clear();
                
foreach (SqlParameter para in paras)
                
{
                    cmd.Parameters.Add(para);
                }

                
                cmd.ExecuteNonQuery();
                
//提交事務
                cmd.Transaction.Commit();
            }

            
catch
            
{
                
//回滾事務
                cmd.Transaction.Rollback();
                
throw;
            }

            
finally
            
{
                conn.Close();
            }


        }

3 TransactionScope事務
  TransactionScope事務類,它可以使程式碼塊成為事務性程式碼。並自動提升為分散式事務
 優點:實現簡單,同時能夠自動提升為分散式事務
Demo:


///<summary>
        
/// TransactionScope事務:可自動提升事務為完全分散式事務的輕型(本地)事務。 
        
/// 使用時要保證MSDTC服務(控制分佈事務)是開啟的可以使用:net start msdtc命令開啟服務;
        
///</summary>

publicvoid ADONetTran2()
        
{
             SqlConnection conn 
=new SqlConnection("Data Source=127.0.0.1;Initial Catalog=Northwind;Persist Security Info=True;User ID=sa;Password=123;");
             SqlCommand cmd 
=new SqlCommand();
            
try
            
{
              
                
using (System.Transactions.TransactionScope ts =new TransactionScope())
                
{
                    
                    cmd.CommandText 
="Update Region Set [email protected] where [email protected]";
                    cmd.CommandType 
= CommandType.Text;
                    cmd.Connection 
= conn;
                    conn.Open();
                    SqlParameter[] paras 
=new SqlParameter[]{
                                        
new SqlParameter ("@UpdateID",SqlDbType.Int,32),
                                        
new SqlParameter ("@UpdateValue",SqlDbType .NChar,50)}
;
                    paras[
0].Value ="2";
                    paras[
1].Value ="Update Value12";

                    
foreach (SqlParameter para in paras)
                    
{
                        cmd.Parameters.Add(para);
                    }

                    cmd.ExecuteNonQuery();


                    cmd.CommandText 
="insert into Region values(@InsertID,@InsertValue)";
                    cmd.CommandType 
= CommandType.Text;

                    paras 
=new SqlParameter[]{
                                        
new SqlParameter ("@InsertID",SqlDbType.Int ,32),
                                        
new SqlParameter ("@InsertValue",SqlDbType.NChar ,50)}
;
                    paras[
0].Value ="8";
                    paras[
1].Value ="Insert Value";

                    cmd.Parameters.Clear();
                    
foreach (SqlParameter para in paras)
                    
{
                        cmd.Parameters.Add(para);
                    }


                    cmd.ExecuteNonQuery();
                    
//提交事務
                    ts.Complete();
                }

            }

            
catch
            
{
                
throw;
            }

            
finally
            
{
                conn.Close();
            }


        }

4 COM+事務
  在分散式應用程式中,往往要同時操作多個數據庫,使用資料庫事務就不能滿足業務的要求了。在COM+中,提供完整的事務處理服務。很方便處理多個數據庫上的事務。
Demo:


///<summary>
        
/// COM+事務
        
///</summary>

publicvoid ComTran()
        
{
            SqlConnection conn 
=new SqlConnection("Data Source=127.0.0.1;Initial Catalog=Northwind;Persist Security Info=True;User ID=sa;Password=123;");
            SqlCommand cmd 
=new SqlCommand();
            ServiceConfig sc 
=new ServiceConfig();

相關推薦

net4事務總結

在一個MIS系統中,沒有用事務那就絕對是有問題的,要麼就只有一種情況:你的系統實在是太小了,業務業務邏輯有隻要一步執行就可以完成了。因此掌握事務處理的方法是很重要,進我的歸類在.net中大致有以下4種事務處理的方法。大家可以參考一下,根據實際選擇適當的事務處理。1 SQL事務    sql事務是使用SQL s

.net4事務總結

{                cmd.CommandText ="Update Region Set [email protected] where [email protected]";                cmd.CommandType = CommandType.Tex

.net dapper實現事務的三方式總結

一個數 begin 單機 操作 不同 三種方式 ransac 方法 數據庫事務 .net 中實現事務查詢的三種方式 1.TransactionScope 通過創建TransactionScope 對象然後包裹connection對象執行相關查詢操作,完成 此種

sh命令 /Linux執行shell指令碼的4方法總結

bash shell 指令碼的方法有多種,現在作個小結。假設我們編寫好的shell指令碼的檔名為hello.sh,檔案位置在/data/shell目錄中並已有執行許可權。 方法一:切換到shell指令碼所在的目錄(此時,稱為工作目錄)執行shell指令碼:此種方法為阿里雲推

Linux執行shell指令碼的4方法總結

這篇文章主要介紹了Linux中執行shell指令碼的4種方法總結,即在Linux中執行shell指令碼的4種方法,需要的朋友可以參考下bash shell指令碼的方法有多種,現在作個小結。假設我們編寫好的shell指令碼的檔名為hello.sh,檔案位置在/data/sh

Android4基本佈局簡單介紹和總結

Android中4種基本佈局 線性佈局LinearLayout LinearLayout線性佈局,是一種非常常用的佈局方式。此佈局會將控制元件線上性方向上依次排列,方向有水平和垂直兩種,首先看一下垂直方向上的佈局格式,程式碼如下: <Linear

[js]js4無節操的預解釋情況

scrip 是否 if語句 orange 表達 一個 報錯 body fun js中4種無節操的預解釋情況 - 1. if語句即使條件不成立,條件裏的表達式也會進行預解釋. - 2. 匿名函數的預解釋: 只對等號左邊與解釋 - 3. 自執行函數的預解釋: 不進行預就解釋,

JS4常見的內存泄漏

global long int message fun this指向 由於 回調 pan 一、什麽是內存泄漏 本質上講,內存泄漏是當一塊內存不再被應用程序使用的時候,由於某種原因,這塊內存沒有返還給操作系統或空閑內存池的現象。 二、幾種常見的內存泄漏 1、意外的全局變量 一

4事務的隔離級別,InnoDB怎樣巧妙實現?

事務ACID特性,當中I代表隔離性(Isolation)。   什麼是事務的隔離性? 隔離性是指,多個使用者的併發事務訪問同一個資料庫時,一個使用者的事務不應該被其它使用者的事務干擾。多個併發事務之間要相互隔離。   一個事

JavaScript4常見的記憶體洩漏及避免方法

垃圾回收演算法        常用垃圾回收演算法叫做**標記清除 (Mark-and-sweep) **,演算法由以下幾步組成: 1、垃圾回收器建立了一個“roots”列表。roots 通常是程式碼中全域性變數的引用。JavaScrip

【 58沈劍 架構師之路】4事務的隔離級別,InnoDB如何巧妙實現?

事務ACID特性,其中I代表隔離性(Isolation)。   什麼是事務的隔離性? 隔離性是指,多個使用者的併發事務訪問同一個資料庫時,一個使用者的事務不應該被其他使用者的事務干擾,多個併發事務之間要相互隔離。   一個事務怎麼會干擾其他事務呢? 咱們舉例子來說明,假設有In

【 58沈劍 架構師之路】4事務的隔離級別,InnoDB如何巧妙實現?

事務ACID特性,其中I代表隔離性(Isolation)。   什麼是事務的隔離性? 隔離性是指,多個使用者的併發事務訪問同一個資料庫時,一個使用者的事務不應該被其他使用者的事務干擾,多個併發事務之間要相互隔離。   一個事務怎麼會干擾其他事務呢? 咱們舉

Java4許可權修飾符修飾類、與成員的分析

前言:在最近做專案中,對許可權修飾符又有了新的認知,對這塊知識的脈絡也越來越清晰,來部落格mark一下。 (ps.文中所說的default修飾指的是不加任何許可權修飾符。此外,為了敘述的方便,本文中涉及的類指的是外部類,涉及的成員指的是非靜態成員方法) 1、類的2種許

在SM4除錯的方法

在SM中做二次開發的時候,難免要除錯,現在列出本來認為行得通的4中除錯方法: 1. RAD Debug     主要用來檢視當前Form的fields或者variables的值,還可以是Expression的值。當要檢視當前Form的fields或者variables的值

java4迴圈方法(附帶例題)

java迴圈結構 順序結構的程式語句只能 被執行一次。如果你要同樣的操作執行多次,就需要使用迴圈結構。 java中有三種主要的迴圈結構: while 迴圈 do...while 迴圈 for 迴圈 在java5中引入一種主要用於陣列的增強型for迴圈。

spring的4事務特性、4隔離級別、7傳播行為

1.事務概念事務是程式中一系列嚴密的操作,所有操作執行必須成功完成,否則在每個操作所做的更改將會被撤銷,這也是事務的原子性(要麼成功,要麼失敗)。2.事務特性(4種)事務特性分為四個:原子性(Atomi

spring的4事務特性,5隔離級別,7傳播行為

spring事務: 什麼是事務: 事務邏輯上的一組操作,組成這組操作的各個邏輯單元,要麼一起成功,要麼一起失敗. 事務特性(4種): 原子性 (atomicity):強調事務的不可分割. 一致

詳解 Java 4 I/O 模型

同步、非同步、阻塞、非阻塞都是和I/O(輸入輸出)有關的概念,最簡單的檔案讀取就是I/O操作。而在檔案讀取這件事兒上,可以有多種方式。 本篇會先介紹一下I/O的基本概念,通過一個生活例子來分別解釋下這幾種I/O模型,以及Java支援的I/O模型。 基本概念 在解釋I/O模

java4修飾符訪問許可權的區別及詳解全過程,final修飾符 ,static修飾符 ,abstract修飾符

 訪問許可權         類   包  子類  其他包     public          ∨   ∨   ∨     ∨     protected     ∨   ∨   ∨     ×     default         ∨   ∨   ×    

用flask開發個人部落格(4)—— flask4全域性變數

一  current_app         current_app代表當前的flask程式例項,使用時需要flask的程式上下文啟用,我們以本專欄第一篇文章中寫的test.py為例介紹下它的用法: 1.1 啟用程式上下文 >>> from test i