日韩性视频-久久久蜜桃-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三种事务处理详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: a视频在线 | 小视频在线| 久久精品在线播放 | 久久久久久久综合色一本 | 无码精品人妻一区二区三区漫画 | www.av日韩| 亚洲另类欧美日韩 | 男人天堂2020 | 成人影视在线播放 | 乱子伦一区二区 | 国产精品亚洲五月天丁香 | 最全aⅴ番号库 | 简单av网| 黄色在线观看视频网站 | 国产无码久久精品 | 在线99视频| 亚洲高清久久 | 亚洲精品一品 | 亚洲国产日韩欧美在线观看 | 午夜视频成人 | 久久久www成人免费精品 | 女性向小h片资源在线观看 日本天天操 | 中文天堂在线资源 | 久热这里有精品 | 美女黄色一级 | 青草视频在线播放 | 福利片第一页 | 天天爽网站| 枫可怜av | 国产自产视频 | 向日葵视频在线播放 | 午夜看毛片 | 天天插天天射天天干 | 亚洲性生活视频 | 国产精品理论片在线观看 | 欧美日韩精 | 性欧美大战久久久久久久免费观看 | www.天天综合 | 6680新视觉电影免费观看 | 久久中文字幕av | 中文字幕在线看人 | 亚洲毛片在线看 | 久久久激情网 | 性猛交ⅹxxx富婆video | 国产黄色片在线 | 天天拍夜夜爽 | 岛国一区二区 | xnxx国产| 国产精品久久久久久免费免熟 | 精品成人av一区二区三区 | 欧美性猛交7777777 | 五月天堂婷婷 | 日本成人激情 | 人人射影院 | 亚洲精品91| 久久一区av | 欧美国产第一页 | 播播成人网 | 麻豆精品国产传媒av | 婷婷色综合 | 少妇肥臀大白屁股高清 | 欧美高清hd19 | 精品无码人妻少妇久久久久久 | 亚洲九九精品 | 一级黄色影院 | 午夜激情福利在线 | 精品麻豆av | 国产精品夫妻 | 日韩亚洲欧美一区二区三区 | 精品视频一区二区三区在线观看 | 黄色片视频网站 | 黄色美女大片 | 欧美大尺度视频 | 亚洲爆乳无码一区二区三区 | 日韩亚洲欧美综合 | 久久中文字幕人妻熟av女蜜柚m | 毛片av网址 | 欧美日韩一级大片 | 操网| 高清日韩一区二区 | 娇妻被老王脔到高潮失禁视频 | 国产又粗又猛又黄又爽无遮挡 | 窝窝午夜精品一区二区 | 免费黄色小视频在线观看 | 一区二区在线观看免费视频 | av基地| 国产一区二区三区在线观看视频 | 久久亚洲网站 | 亚洲大片免费看 | 成人自拍视频 | 动漫av一区二区 | 亚洲高清欧美 | 潘金莲一级淫片aaaaa | 男人操女人免费网站 | 国产乱人乱偷精品视频a人人澡 | 欧美日韩综合精品 | 一及黄色大片 | 国产片黄色 | 人人爱操 |