国产探花免费观看_亚洲丰满少妇自慰呻吟_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)
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 蓬溪县| 富宁县| 车险| 咸宁市| 普兰店市| 武宣县| 阿尔山市| 岑巩县| 丁青县| 科技| 益阳市| 施秉县| 建瓯市| 呼图壁县| 聊城市| 巴青县| 阳原县| 五莲县| 康乐县| 怀柔区| 灌阳县| 酒泉市| 永宁县| 蒙城县| 德钦县| 平顺县| 青海省| 德格县| 河津市| 若羌县| 德保县| 西宁市| 遵义县| 阳谷县| 株洲市| 峨边| 桦南县| 庐江县| 房产| 常山县| 福州市|