使用System.Transactions
???? 一。如何使用
??? System.Transactions 使用非常簡單,下面是使用的代碼
????????? DEMO 1
?
?
代碼 using?System;using?System.Collections.Generic;
using?System.Text;
using?System.Transactions;
using?System.Data.SqlClient;
namespace?TestTransactions
{
????class?Transactions
????{
????????private?void?UseTransactions()
????????{
????????????using?(TransactionScope?tran?=?new?TransactionScope())
????????????{
????????????????using?(SqlConnection?conn?=?new?SqlConnection("server=.;database=Northwind;uid=sa;pwd=sa"))
????????????????{
????????????????????string?strInert?=?"insert?into?table1(name,password)?values('ilahsa','123456')";
????????????????????string?strUp?=?"update?table1?set?password='654321'?where?name?=?'ilahsa'";
????????????????????SqlCommand?cmd1?=?new?SqlCommand(conn,?strInert);
????????????????????cmd1.ExecuteNonQuery();
????????????????????SqlCommand?cmd2?=?new?SqlCommand(conn,?strUp);
????????????????????cmd2.ExecuteNonQuery();
????????????????}
????????????????tran.Complete();
????????????}?
????????}
????}
}
?
?
?
?首先聲明一個TransactionScope? 的實例,把需要事務(wù)處理的代碼放在Using的語句塊,這段代碼封裝了連個SQL 指令,只要其中有一個執(zhí)行過程中發(fā)生異常,TransactionScope 對象會自動回滾事務(wù),代碼正常執(zhí)行的話, tran.Complete()語句提交了事務(wù)。DEMO1中使用了兩個Using 語句,代碼執(zhí)行完畢會自動釋放資源(比較推薦這種方式),看到了嗎,使用 System.Data.SqlClient處理事務(wù)是如此的簡單,只需幾行代碼就搞定了
?
二.事務(wù)的設(shè)置
?
| ?TransactionScopeOptions | ?描述 |
| ?Required | ?如果已經(jīng)存在一個事務(wù),那么這個事務(wù)范圍將加入已有的事務(wù)。否則,它將創(chuàng)建自己的事務(wù)。 |
| ?RequiresNew | ?這個事務(wù)范圍將創(chuàng)建自己的事務(wù)。 |
| Suppress | ?如果處于當(dāng)前活動事務(wù)范圍內(nèi),那么這個事務(wù)范圍既不會加入氛圍事務(wù) (ambient transaction),也不會創(chuàng)建自己的事務(wù)。當(dāng)部分代碼需要留在事務(wù)外部時,可以使用該選項。 |
???????
--------------------------------------------------------------------------------
使用TransactionScopeOptions可以改變TransactionScope的默認(rèn)事務(wù)類型 (默認(rèn)的事務(wù)類型是Required)。
使用方法
DEMO2
?
?
代碼 using?(TransactionScope?ts?=?new?TransactionScope(TransactionScopeOption.RequiresNew))????????????{
????????????????using?(SqlConnection?conn1?=?new?SqlConnection(str))
????????????????{
????????????????????SqlCommand?cmd?=?new?SqlCommand(conn1,?strsql1);
????????????????????cmd.ExecuteNonQuery();
????????????????}
????????????????using?(SqlConnection?conn2?=?new?SqlConnection(conn2))
????????????????{
????????????????????SqlCommand?cmd?=?new?SqlCommand(conn2,?strsql2);
????????????????????cmd.ExecuteNonQuery();
????????????????}
????????????????ts.Complete();
????????????}
?
?
?
?
三。 什么時候使用System.Transactions
??????? 第一中情況是,你的數(shù)據(jù)庫支持輕型事務(wù),何為輕型事務(wù)MSDN上有很明確的介紹,在這里就不多說了,也就是你的數(shù)據(jù)庫是SQL SERVER 2005.
??????? 第二種情況是你的事務(wù)中使用了分布式的數(shù)據(jù)庫系統(tǒng)。即在一個事務(wù)處理中使用了多個數(shù)據(jù)庫。使用System.Transactions也會使性能有很大的提升。
?????? 如果數(shù)據(jù)庫是SQL SERVER? 2000,而又只連接一個數(shù)據(jù)庫的話,使用ado.net 的事務(wù)處理更有優(yōu)勢。
?
轉(zhuǎn)載于:https://www.cnblogs.com/jhxk/articles/1666099.html
總結(jié)
以上是生活随笔為你收集整理的使用System.Transactions的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xfce4 菜单文件
- 下一篇: [翻译]C#数据结构与算法 – 第六章B