SqlServer中的事物彙總

2021-06-07 12:32:30 字數 4340 閱讀 2654

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

1 sql事務

sql事務是使用sql server自身的事務:在儲存過程中直接使用begin tran,rollback tran,commit tran實現事務:

優點:執行效率最佳

限制:事務上下文僅在資料庫中呼叫,難以實現複雜的業務邏輯。

demo:(所有demo,都以sql server自帶的northwind資料的表region為例)

帶事務的儲存過程

create procedure dbo.sptransaction

(@updateid int,

@updatevalue nchar(50),

@insertid int,

@insertvalue nchar(50))as

begin tran

update region  set regiondescription=@updatevalue where regionid=@updateid

insert into region values (@insertid,@insertvalue)

declare @regionerror int

select @regionerror=@@error

if(@regionerror=0)

commit tran

else

rollback tran

go執行帶事務的儲存過程

/**

/// sql事務:

///

public void sqltran()

;paras[0].value = "2";

paras[1].value = "update value1";

paras[2].value = "6";

paras[3].value = "insert value1";

foreach (sqlparameter para in paras )

cmd.executenonquery();  

}2 ado.net事務

ado.net事務可能是大家一般都用的

優點:簡單,效率和資料庫事務差不多。

缺點:事務不能跨資料庫,只能在乙個資料庫連線上。如果是兩個資料庫上就不能使用該事務了。

demo:

ado.net事務

/**

/// 一般的ado.net 事務

///

public void adonettran1()

;paras[0].value = "2";

paras[1].value = "update value12";

foreach (sqlparameter para in paras)

//開始事務

cmd.transaction = conn.begintransaction();

cmd.executenonquery();

cmd.commandtext = "insert into region values(@insertid,@insertvalue)";

cmd.commandtype = commandtype.text;

paras = new sqlparameter;

paras[0].value = "7";

paras[1].value = "insert value";

cmd.parameters.clear();

foreach (sqlparameter para in paras)

cmd.executenonquery();

//提交事務

cmd.transaction.commit();

}catch

finally

}3 transactionscope事務

transactionscope事務類,它可以使**塊成為事務性**。並自動提公升為分布式事務

優點:實現簡單,同時能夠自動提公升為分布式事務

demo:

transactionscope事務

/**

/// transactionscope事務:可自動提公升事務為完全分布式事務的輕型(本地)事務。

/// 使用時要保證msdtc服務(控制分布事務)是開啟的可以使用:net start msdtc命令開啟服務;

///

public void adonettran2()

;paras[0].value = "2";

paras[1].value = "update value12";

foreach (sqlparameter para in paras)

cmd.executenonquery();

cmd.commandtext = "insert into region values(@insertid,@insertvalue)";

cmd.commandtype = commandtype.text;

paras = new sqlparameter;

paras[0].value = "8";

paras[1].value = "insert value";

cmd.parameters.clear();

foreach (sqlparameter para in paras)

cmd.executenonquery();

//提交事務

ts.complete();}}

catch

finally

}4 com+事務

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

demo:

com+事務

/**

/// com+事務

///

public void comtran()

;paras[0].value = "2";

paras[1].value = "update value22";

foreach (sqlparameter para in paras)

cmd.executenonquery();

cmd.commandtext = "insert into region values(@insertid,@insertvalue)";

cmd.commandtype = commandtype.text;

paras = new sqlparameter;

paras[0].value = "9";

paras[1].value = "insert value";

cmd.parameters.clear();

foreach (sqlparameter para in paras)

cmd.executenonquery();

//提交事務

contextutil.setcomplete();

}catch

finally

}在.net中還有些也能進行事務處理,如web service中

需要特別補充的是:

如果你使用的是分布事務(transactionscope事務和com+事務),在預設情況下你是要重新配置安裝sql server資料庫伺服器和訪問資料庫的客戶端的.(如果沒有配置執行會出現以下錯誤:該夥伴事務管理器已經禁止了它對遠端/網路事務的支援。 (異常來自 hresult:0x8004d025)

)下面是msdn上關於配置分布式事務的一段原話:

配置分布式事務

要啟用分布式事務,可能需要通過網路啟用 ms dtc,以便在使用應用了最新的 service pack 的較新作業系統(例如 windows xp 或 windows 2003)時使用分布式事務。如果啟用了 windows 防火牆(windows xp service pack 2 的預設設定),必須允許 ms dtc 服務使用網路或開啟 ms dtc 埠。

實際怎麼配置呢,經過我的實際使用:大致如下:開啟'控制面板'->'管理工具'->'元件服務',點開'元件服務'->'計算機'->'我的電腦',在'我的電腦'上右擊屬性,點'msdtc',然後點'安全性配置'。作為資料庫的伺服器的配置如下:

而訪問資料庫的客戶端的配置和伺服器端的稍有些差別:

在設定完上面的還有使防火牆ms dtc 服務使用網路或開啟 ms dtc 埠:執行netsh firewall set allowedprogram %windir%\system32\msdtc.exe msdtc enable命令就可以了

SQL Server中的常用函式彙總

在sql server中常用5類的函式 字串函式,日期函式,數學函式,系統函式,聚合函式。常用的字串函式 1.charindex 字元索引 2.len 長度 3.upper 大寫 4.ltrim 左裁減 5.rtrim 右裁減 6.left 左 7.right 右 8.stuff 刪除並新增 9.r...

關於 sqlserver 的事物回滾

例 先進行標記事物的開始 begin transaction 進行表的操作,例如插入 修改等。在進行過程中,如果發生錯誤則回滾事物 rollback transaction 若事物結束,則提交事物 commit 在事物過程中通常用 error 語句是否發生錯誤 例如,插入幾條資料,後面的資料主鍵重複...

sql server 優化 彙總

原創連線 sql server查詢優化 sql server效能優化綜述 sql語句優化彙總 sql優化34條 sql語句優化彙總 sql server資料庫的整理優化的基本過程 一 sql server 資料庫的整理優化的基本過程 二 sql server優化 1 索引 2008 sql serv...