日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET三种事务处理详解

發布時間:2025/3/20 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET三种事务处理详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

體系結構:SQL事務處理、ADO.NET事務處理、COM+事務處理

?

數據庫事務處理:T-SQL語句中完成, Begin Transaction Commit/Roll Back

BEGIN TRANSACTION

BEGIN TRANSACTION { tran_name}

{trans_name1| @tran_name-veriable1}事務名不得超過32個字符,否則自截斷。此處變量的類型僅可以是charvarcharncharnvarchar

WITH MARK ['DESCRIPTION'] 指定在日志中標記事務

EXPRESSION2

BEGIN TRANS啟動一個本地事務,但是在應用程序執行一個必須的記錄操作之前,他不被記錄在事務日志中。

With Mark選項使得事務名被置于事務日志中,將數據還原到早期狀態時,可使用標記事務代替日期和時間。

在未標記的數據庫事務中可以嵌套標記的事務。如

BEGIN TRAN T1

UPDATE table1 ...

BEGIN TRAN M2 WITH MARK

UPDATE table2 ...

SELECT * from table1

COMMIT TRAN M2

UPDATE table3 ...

COMMIT TRAN T1

命名事務示例:

DECLARE @TranName VARCHAR(20)

SELECT @TranName = 'MyTransaction'

BEGIN TRANSACTION @TranName

USE AdventureWorks

DELETE FROM AdventureWorks.HumanResources.JobCandidate

WHERE JobCandidateID = 13

COMMIT TRANSACTION @TranName

標記事務示例:

BEGIN TRANSACTION CandidateDelete

WITH MARK N'Deleting a Job Candidate'

USE AdventureWorks

DELETE FROM AdventureWorks.HumanResources.JobCandidate

WHERE JobCandidateID = 13

COMMIT TRANSACTION CandidateDelete

COMMIT TRANSACTION

COMMIT {TRAN|TRANSACTION}

[transaction_name | [@tran_name_variable ] ]BEGIN部分的規則

[ ; ]

提交一般事務示例:

USE AdventureWorks

BEGIN TRANSACTION

DELETE FROM HumanResources.JobCandidate

WHERE JobCandidateID = 13

COMMIT TRANSACTION

提交嵌套事務示例:

BEGIN TRANSACTION OuterTran

????INSERT INTO TestTran VALUES (1, 'aaa')

????BEGIN TRANSACTION Inner1

????????INSERT INTO TestTran VALUES (2, 'bbb')

????????BEGIN TRANSACTION Inner2

????????????INSERT INTO TestTran VALUES (3, 'ccc')

????????COMMIT TRANSACTION Inner2

????COMMIT TRANSACTION Inner1

COMMIT TRANSACTION OuterTran

ROLLBACK TRANSACTION

ROLLBACK { TRAN | TRANSACTION }

--transaction_name同上,此處savepoint_name規則同transaction_name,為SAVE TRANSACTION 語句中的savepoint_name,用于條件回滾之影響事務的一部分

[ transaction_name | @tran_name_variable | savepoint_name | @savepoint_variable ]

[ ; ]

示例:

USE TempDB

CREATE TABLE ValueTable ([value] int)

BEGIN TRAN Transaction1

INSERT INTO ValueTable VALUES(1)

INSERT INTO ValueTable VALUES(2)

SELECT * FROM ValueTable

ROLLBACK TRAN Transaction1

SELECT * FROM ValueTable

INSERT INTO ValueTable VALUES(3)

INSERT INTO ValueTable VALUES(4)

SELECT * FROM ValueTable

DROP TABLE ValueTable

結果:

綜合示例:

begin TRAN

????declare @orderDetailsError int,@procuntError int

  delete from [order details] where productid=42

  select @orderDetailsError =@@error

  delete from products where productid=42

  select @procuntError=@@error

  if(@orderDetailsError =0 and @procuntError=0)

   ????COMMIT TRAN

  else

   ????ROLLBACK TRAN

ADO.NET事務處理:

示例:

public void ExecuteNoneSql(string p_sqlstr, params string[] p_cmdStr)

{

using (SqlConnection conn = new SqlConnection(p_sqlstr))

{

Conn.Open();

SqlCommand cmd = new SqlCommand();

cmd.Connection = conn;

SqlTransaction trans = null;

trans = conn.BeginTransaction(); //初始化事務

cmd.Transaction = trans; //綁定事務

try

{

for (int i = 0; i < p_cmdStr.Length; i++)

{

cmd.CommandText = p_cmdStr[i];

cmd.CommandType = CommandType.Text;

cmd.ExecuteNonQuery();

}

trans.Commit(); //提交

}

catch (SqlException e)

{

if (trans != null) trans.Rollback(); //回滾

else

{//寫日志}

}

}

}

帶保存點回滾示例:

using (SqlConnection conn = new SqlConnection(p_sqlstr))

{

conn.Open();

SqlCommand cmd = new SqlCommand();

cmd.Connection = conn;

SqlTransaction trans = conn.BeginTransaction("table");

cmd.Transaction = trans;

try

{

cmd.CommandText = "Insert into table_name1 values(values1,values2,....)";

cmd.CommandType = CommandType.Text;

cmd.ExecuteNonQuery();

cmd.CommandText = "Insert into table_name2 values(values1,values2,....)";

cmd.CommandType = CommandType.Text;

cmd.ExecuteNonQuery();

trans.Save("table1");

cmd.CommandText = "Insert into table_name2 values(values1,values2,....)";

cmd.CommandType = CommandType.Text;

cmd.ExecuteNonQuery();

trans.Save("table2");

trans.Commit();

}

catch

{

try

{ trans.Rollback("table2") ; }

catch

{

try{ trans.Rollback("table1") ; }

catch{ trans.Rollback("table") ; }

}

}

}

COM+事務處理:

COM+事務必須繼承自System.EnterpriseServices.ServicedComponent其實WEB也是繼承自該類,所以WEB支持COM+事務處理。

第一步、新建一個COM+事務處理的類。

[Transaction(TransactionOption.Required)]

public class MyCOMPlus : System.EnterpriseServices.ServicedComponent

{

..............

}

TransactionOption為枚舉類型,具有五個選項。

DISABLED忽略當前上下文中的任何事務

NOTSUPPORTED使用非受控事件創建組件

REQUIRED如有事務存在則共享事務,如有必要則創建事務(事務池,事務處理中所選擇項)REQUIRESNEW是有新建的事務,與上下文無關

SUPPORTED如果事務存在則共享事務。

一般來說COM+中的組件需要REQUIREDSUPPORTED。當組件需要同活動中其他事務處理的提交或回滾隔離開來的時候建議使用REQUIRESNEWCOM+事務有手動處理和自動處理,自動處理就是在所需要自動處理的方法前加上[AutoComplete],根據方法的正常或拋出異常決定提交或回滾。手動處理其實就是調用EnableCommit()SetComplete()SetAbort()方法。

手動處理示例:

public void TestTransaction()

{

try

{

ContextUtil.EnableCommit(); //對應BEGIN TRANSACTION

InsertRecord();

DeleteRecord();

UpdateRecord2();

ContextUtil.SetComplete(); //對應TRANSACTION.COMMIT

}

catch (Exception ex)

{

ContextUtil.SetAbort(); //對應TRANSACTION.ROLLBACK

}

}

自動事務處理示例(只需要在方法前面加上AutoCompleteattribute聲明即可):

[AutoComplete]

public void TestTransaction()

{

InsertRecord();

DeleteRecord();

UpdateRecord2();

}

?

三者性能比較:

性能排名: SQL事務處理>ADO.NET事務處理>COM+事務處理

SQL事務處理只需要進行一次數據庫交互,優點就是速度很快,而且所有邏輯包含在一個單獨的調用中,與應用程序獨立,缺點就是與數據庫綁定。

ADO.NET需要2n次數據庫往返,但相對而言,ADO.NET事務處理性能比SQL事務處理低很少,在一般應用程序中可以忽略。而且ADO.NET事務處理將事務處理與數據庫獨立,增加了程序的移植性。而且他也可以橫跨多個數據庫,不過他對于數據庫的類型要求一致。

COM+事務處理性能最低,主要因為COM+本身的一些組件需要內存開銷。但COM+可以橫跨各種數據存儲文件,這一點功能是前兩者所無法媲美的。

轉載于:https://www.cnblogs.com/BLoodMaster/archive/2010/03/18/1688660.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的.NET三种事务处理详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 激情成人综合 | 国产人妖在线视频 | 双性懵懂美人被强制调教 | 国产精品伊人 | 国产精品一区久久久 | 伊人网在线视频观看 | 骚虎av | 亚洲91精品| www.好了av.com| 亚洲国产精品av | 黄色伊人 | 亚洲一区小说 | 日本热久久 | 激情视频免费在线观看 | 亚洲av无码不卡一区二区三区 | 黄av在线播放 | 亚洲最大福利网 | 黄色片的网站 | 岛国av免费观看 | 牛牛影视免费观看 | 福利视频二区 | 亚洲 欧美 国产 另类 | 日韩和欧美的一区二区 | 日韩网站在线 | 久久久免费av | 国产黄色电影 | 欧美裸体xxxx| 免费在线观看污网站 | 高潮疯狂过瘾粗话对白 | 看黄色的网址 | 伊人22| 偷拍亚洲另类 | 欧美亚洲国产一区二区三区 | 精品人妻一区二区三区日产 | 欧美高清不卡 | 麻豆回家视频区一区二 | 久久大尺度 | 国产精品中文无码 | 另类亚洲色图 | 久久久久久国产精品免费播放 | h视频免费在线观看 | 人与禽一级全黄 | 国产精品夜夜夜爽张柏芝 | 天堂va欧美va亚洲va老司机 | 国产白丝袜美女久久久久 | 中文在线一区二区 | 操操日 | 亚洲免费砖区 | 色网导航站| 最近免费中文字幕大全免费版视频 | 九九热国产精品视频 | 久草超碰 | 麻豆精品免费视频 | 黄色片a级 | 亚洲av无码潮喷在线观看 | 国产成人免费网站 | 成人自拍视频在线 | 大胸美女吻戏 | 已满18岁免费观看电视连续剧 | 国产香蕉视频在线播放 | 欧美精品黄色片 | 一区二区成人精品 | 色综合色婷婷 | 一区二区视频在线观看免费 | 国产区精品 | 又爽av| 日韩大片免费看 | 97超视频 | 欧美精品 在线观看 | 人妻 丝袜美腿 中文字幕 | 国产日韩一区二区在线观看 | 少妇高潮一区二区三区四区 | 开心激情综合网 | 中日精品一色哟哟 | 69日本xxxxxxxxx30 在线波多野结衣 | 欧美亚洲一区二区三区四区 | 99久久久成人国产精品 | 4438国产精品一区二区 | 亚洲视频综合 | 日本xxxx在线观看 | 成人综合影院 | 日本一区二区三区久久久久 | 欧美福利网站 | av一级在线 | 日本五十路女优 | 中国美女一级片 | 亚洲国产精品免费视频 | 亚洲精品久久视频 | 国产国语亲子伦亲子 | 国产在线色视频 | 97av在线播放| 久久久毛片 | 国产免费一区二区三区三州老师 | 欧美激情黑白配 | 少妇免费直播 | 国产午夜视频在线播放 | 最新色网站 | 日本美女三级 | 国产偷拍一区二区 |