最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中TransactionScope的使用小結(jié)

 更新時間:2014年01月17日 08:59:22   作者:  
本篇文章主要是對C#中TransactionScope的使用方法進行了詳細的介紹,需要的朋友可以過來參考下,希望對大家有所幫助

TransactionScope是.Net Framework 2.0滯后,新增了一個名稱空間。它的用途是為數(shù)據(jù)庫訪問提供了一個“輕量級”[區(qū)別于:SqlTransaction]的事務(wù)。使用之前必須添加對 System.Transactions.dll 的引用。

下列代碼就是一個正在創(chuàng)建的事務(wù),這個事務(wù)自身還封裝了多個數(shù)據(jù)庫查詢。只要任意一個 SqlCommand 對象引發(fā)異常,程序流控制就會跳出 TransactionScope 的 using 語句塊,隨后,TransactionScope 將自行釋放并回滾該事務(wù)。由于這段代碼使用了 using 語句,所以 SqlConnection 對象和 TransactionScope 對象都將被自動調(diào)用Dispose()釋放。由此可見,只需添加很少的幾行代碼,您就可以構(gòu)建出一個事務(wù)模型,這個模型可以對異常進行處理,執(zhí)行結(jié)束后會 自行清理,此外,它還可以對命令的提交或回滾進行管理。

復(fù)制代碼 代碼如下:

//創(chuàng)建TransactionScope
using (TransactionScope tsCope= new TransactionScope())
{
 using (SqlConnection cn2005= new SqlConnection(someSql2005))
 {
 SqlCommand cmd= new SqlCommand(sqlUpdate, cn2005);
 cn2005.Open();
 cmd.ExecuteNonQuery();
 }
 using (SqlConnection cn2005= new SqlConnection(anotherSql2005))
 {
 SqlCommand cmd= new SqlCommand(sqlDelete, cn2005);
 cn2005.Open();
 cmd.ExecuteNonQuery();
 }

 tsCope.Complete();
}


連接字符串關(guān)鍵字(Enlist)
SqlConnection.ConnectionString 屬性支持關(guān)鍵字 Enlist,該關(guān)鍵字指示 System.Data.SqlClient 是否將檢測事務(wù)上下文并自動在分布式事務(wù)中登記連接。 如果 Enlist=true,連接將自動在打開的線程的當前事務(wù)上下文中登記。 如果 Enlist=false,SqlClient 連接不會與分布式事務(wù)進行交互。 Enlist 的默認值為 true。 如果連接字符串中未指定 Enlist,若在連接打開時檢測到一個,連接將自動在分布式事務(wù)中登記。
復(fù)制代碼 代碼如下:

Server=(local)SQL2005;Database=Northwind;Integrated Security=SSPI;enlist=false

上面所看到的示例中我們使用了TransactionScope的默認設(shè)置。TransactionScope有三種模式:

TransactionScopeOptions

描述

Required

如果已經(jīng)存在一個事務(wù),那么這個事務(wù)范圍將加入已有的事務(wù)。否則,它將創(chuàng)建自己的事務(wù)。

RequiresNew

這個事務(wù)范圍將創(chuàng)建自己的事務(wù)。

Suppress

如果處于當前活動事務(wù)范圍內(nèi),那么這個事務(wù)范圍既不會加入氛圍事務(wù) (ambient transaction),也不會創(chuàng)建自己的事務(wù)。當部分代碼需要留在事務(wù)外部時,可以使用該選項。

您可以在代碼的任何位置上隨是查看是否存在事務(wù)范圍,具體方法就是查看 System.Transactions.Transaction.Current 屬性。如果這個屬性為“null”,說明不存在當前事務(wù)。

若要更改 TransactionScope 類的默認設(shè)置,您可以創(chuàng)建一個 TransactionOptions 對象,然后通過它在 TransactionScope 對象上設(shè)置隔離級別和事務(wù)的超時時間。TransactionOptions 類有一個 IsolationLevel 屬性,通過這個屬性可以更改隔離級別,例如從默認的可序列化 (Serializable) 改為ReadCommitted,甚至可以改為 SQL Server 2005 引入的新的快照 (Snapshot) 級別。(請記住,隔離級別僅僅是一個建議。大多數(shù)數(shù)據(jù)庫引擎會試著使用建議的隔離級別,但也可能選擇其他級別。)此 外,TransactionOptions 類還有一個 TimeOut 屬性,這個屬性可以用來更改超時時間(默認設(shè)置為 1 分鐘)。

下列代碼中使用了默認的 TransactionScope 對象及其默認構(gòu)造函數(shù)。也就是說,它的隔離級別設(shè)置為可序列化 (Serializable),事務(wù)的超時時間為 1 分鐘,而且 TransactionScopeOptions 的設(shè)置為 Required。

TransactionOptions tOpt= new TransactionOptions();
//設(shè)置TransactionOptions模式
tOpt.IsolationLevel= IsolationLevel.ReadCommitted;
// 設(shè)置超時間隔為2分鐘,默認為60秒

復(fù)制代碼 代碼如下:

tOpt.Timeout= new TimeSpan(0,2,0);
string cnString= ConfigurationManager.ConnectionStrings["sql2005DBServer"].ConnectionString);
using (TransactionScope tsCope= new TransactionScope(TransactionScopeOption.RequiresNew, tOpt))
{
using (SqlConnection cn2005= new SqlConnection(cnString)
{
SqlCommand cmd= new SqlCommand(updateSql1, cn2005);
cn2005.Open();
cmd.ExecuteNonQuery();
}
tsCope.Complete();
}

嵌套應(yīng)用
如下列代碼,假設(shè) Method1 創(chuàng)建一個 TransactionScope,針對一個數(shù)據(jù)庫執(zhí)行一條命令,然后調(diào)用 Method2。Method2 創(chuàng)建一個自身的 TransactionScope,并針對一個數(shù)據(jù)庫執(zhí)行另一條命令。   
復(fù)制代碼 代碼如下:

private void Method1()
{
using (TransactionScope ts=
new TransactionScope(TransactionScopeOption.Required))
{
using (SqlConnection cn2005= new SqlConnection())
{
SqlCommand cmd= new SqlCommand(updateSql1, cn2005);
cn2005.Open();
cmd.ExecuteNonQuery();
}
Method2();
ts.Complete();
}
}
private void Method2()
{
using (TransactionScope ts=
new TransactionScope(TransactionScopeOption.RequiresNew))
{
using (SqlConnection cn2005= new SqlConnection())
{
SqlCommand cmd= new SqlCommand(updateSql2, cn2005);
cn2005.Open();
cmd.ExecuteNonQuery();
}
ts.Complete();
}
}

總結(jié):
進入和退出事務(wù)都要快,這一點非常重要,因為事務(wù)會鎖定寶貴的資源。最佳實踐要求我們在需要使用事務(wù)之前再去創(chuàng)建它,在需要對其執(zhí)行命令前迅速打開連接, 執(zhí)行動作查詢 (Action Query),并盡可能快地完成和釋放事務(wù)。在事務(wù)執(zhí)行期間,您還應(yīng)該避免執(zhí)行任何不必要的、與數(shù)據(jù)庫無關(guān)的代碼,這能夠防止資源被毫無疑義地鎖定過長的 時間。

使用注意:TransactionScope事務(wù)需要開啟一些服務(wù),(如果數(shù)據(jù)庫不在本地,服務(wù)器和客戶端都需要開啟以下服務(wù)和組件服務(wù))

以下組件服務(wù)需要開啟

step1

step2:

相關(guān)文章

  • WPF調(diào)用WindowsAPI實現(xiàn)屏幕錄制

    WPF調(diào)用WindowsAPI實現(xiàn)屏幕錄制

    這篇文章主要為大家詳細介紹了WPF如何調(diào)用WindowsAPI實現(xiàn)屏幕錄制,文中的示例代碼講解詳細,對我們學習或工作有一定幫助,感興趣的小伙伴可以了解一下
    2023-05-05
  • c#消息提示框messagebox的詳解及使用

    c#消息提示框messagebox的詳解及使用

    這篇文章主要介紹了c#消息提示框messagebox的詳解及使用的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • c# 實現(xiàn)發(fā)送郵件到指定郵箱

    c# 實現(xiàn)發(fā)送郵件到指定郵箱

    這篇文章主要介紹了c# 如何實現(xiàn)發(fā)送郵件到指定郵箱,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#中將PPT轉(zhuǎn)換為PDF的詳細步驟和代碼示例

    C#中將PPT轉(zhuǎn)換為PDF的詳細步驟和代碼示例

    在當今的企業(yè)級應(yīng)用中,將PPT演示文稿轉(zhuǎn)換為PDF文檔的需求日益增長,所以本文將深入探討如何利用C#編程語言,結(jié)合強大的 Spire.Presentation for .NET 庫,高效、便捷地實現(xiàn)PPT到PDF的轉(zhuǎn)換,需要的朋友可以參考下
    2025-09-09
  • C#之lock的使用及說明

    C#之lock的使用及說明

    這篇文章主要介紹了C#之lock的使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • C#實現(xiàn)gRPC服務(wù)和調(diào)用示例詳解

    C#實現(xiàn)gRPC服務(wù)和調(diào)用示例詳解

    gRPC?是一種與語言無關(guān)的高性能遠程過程調(diào)用?(RPC)?框架,這篇文章主要為大家詳細介紹了C#如何實現(xiàn)gRPC服務(wù)和調(diào)用,需要的可以參考一下
    2024-01-01
  • C# 異步多線程入門到精通之ThreadPool篇

    C# 異步多線程入門到精通之ThreadPool篇

    ThreadPool 是 .net 2.0 時代的產(chǎn)物,有了 Thread 為什么還會有 ThreadPool 呢?ThreadPool 可以做到限制線程數(shù)量、重用線程
    2021-11-11
  • C# 使用modbus 讀取PLC 寄存器地址的方法

    C# 使用modbus 讀取PLC 寄存器地址的方法

    今天通過本文給大家介紹C# 使用modbus 讀取PLC 寄存器地址的方法,使用的組件Nmodbus,文中通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2021-10-10
  • C# DirectShow預(yù)覽攝像頭并截圖

    C# DirectShow預(yù)覽攝像頭并截圖

    這篇文章主要為大家詳細介紹了C# DirectShow預(yù)覽攝像頭并截圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • WinForm中實現(xiàn)雙向數(shù)據(jù)綁定的示例詳解

    WinForm中實現(xiàn)雙向數(shù)據(jù)綁定的示例詳解

    在開發(fā)WinForm應(yīng)用程序時,常常需要將數(shù)據(jù)模型與用戶界面進行同步,傳統(tǒng)的做法是手動監(jiān)聽UI變化并更新數(shù)據(jù)模型,這種方式不僅繁瑣而且容易出錯,為了解決這個問題,許多現(xiàn)代UI框架都支持雙向數(shù)據(jù)綁定,本文介紹WinForm中實現(xiàn)雙向數(shù)據(jù)綁定的示例,需要的朋友可以參考下
    2025-05-05

最新評論

长泰县| 陆丰市| 普安县| 铜川市| 嘉祥县| 巴林右旗| 铁岭市| 始兴县| 栾川县| 会昌县| 潢川县| 南溪县| 宁蒗| 即墨市| 合川市| 巴马| 五华县| 改则县| 洞头县| 剑阁县| 观塘区| 台江县| 西吉县| 元阳县| 辽阳县| 班戈县| 昌平区| 吴旗县| 海晏县| 宕昌县| 称多县| 荔波县| 浙江省| 余庆县| 泊头市| 米易县| 阜城县| 霞浦县| 高碑店市| 澄江县| 平泉县|