国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

如何在.NET中實現事務(1)

2024-07-10 13:04:56
字體:
來源:轉載
供稿:網友


如何在.net中實現事務機制呢? 通常可以使用2種方式: 直接寫入到sql 中;使用ado.net 實現。下面依次作一下介紹:

方法1:直接寫入到sql 中



使用 begin trans, commit trans, rollback trans 實現:

例如

begin trans

declare @orderdetailserror int, @producterror int

delete from "order details" where productid=42

select @orderdetailserror = @@error

delete from products where productid=42

select @producterror = @@error

if @orderdetailserror = 0 and @producterror = 0

commit trans

else

rollback trans

這種方法比較簡單,具體可以查閱相關sql server 幫助



方法2 :使用ado.net 實現,使用這種方式的優點是可以在中間層來管理事務,當然你也可以選擇在數據層來實現。

sqlconnection 和oledbconnection 對象有一個 begintransaction 方法,它可以返回 sqltransaction 或者oledbtransaction 對象。而且這個對象有 commit 和 rollback 方法來管理事務,具體例子如下:

cnnorthwind.open()



dim trans as sqltransaction = cnnorthwind.begintransaction()



dim cmdel as new sqlcommand()

cmdel.connection = cnnorthwind

cmdel.transaction = trans



try



cmdel.commandtext = _

"delete [order details] where productid = 42"



cmdel.executenonquery()



cmdel.commandtext = "delete products where productid = 42"



cmdel.executenonquery()



trans.commit()



catch xcp as exception



trans.rollback()



finally



cnnorthwind.close()



end try

ok,通過上面的例子可以實現與方法1同樣的效果。

并發問題:

如果沒有鎖定且多個用戶同時訪問一個數據庫,則當他們的事務同時使用相同的數據時可能會發生問題。并發問題包括: 丟失或覆蓋更新,未確認的相關性(臟讀),不一致的分析(非重復讀),幻像讀。但是如何來避免數據讀取時臟讀等問題出現呢?

您可以參考后面我寫的文章:如何在.net中實現事務(2)
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 西峡县| 嘉善县| 信丰县| 湘西| 青川县| 南召县| 伊金霍洛旗| 河南省| 巴林右旗| 磐安县| 田东县| 托克逊县| 禄劝| 湖口县| 冀州市| 麻阳| 丰城市| 辽阳市| 乐至县| 酉阳| 永德县| 太仆寺旗| 郑州市| 景德镇市| 大悟县| 九台市| 德兴市| 岳池县| 阜新| 大庆市| 浙江省| 肇源县| 古田县| 井冈山市| 睢宁县| 广南县| 新宾| 新昌县| 泗洪县| 竹山县| 河南省|