在進行機房收費系統時,有個學生註冊這麼乙個功能。註冊功能需要向student(學生)表、card(卡)表、chargerecord(充值記錄)表寫入記錄。
當時,在處理這個問題時,存在乙個困惑,如果在向資料庫插入資料時,student表插入成功,card表或chargerecord表未能插入成功怎麼辦?這樣不就導致了資料不一致嗎?
後來通過查筆記,發現在ado.net中,有「事務」這麼一致處理機制。事務有原子性、一致性、隔離性、永續性4種特徵,通過「事務」這種處理機制,可以保證資料的一致性。
在ado.net中,又分為「本地事務處理」和「分布式事務處理」。「本地事務處理」操作是乙個資料庫,「分布式事務處理」操作的是多個資料庫,這是它們的區別。
因為這次只用到了乙個資料庫,那我們就先從「本地事務處理」開始學習。
下面讓我用乙個小demo來向大家講解:
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.data;
using system.data.sqlclient;
namespace transactiondemo
; //連線資料庫的字串
string strcon = "data source=.;initial catalog=test;uid=sa;pwd=123456;";
using (sqlconnection con = new sqlconnection(strcon))
//提交事務
trans.commit();
}catch (exception ex)}}
}}
}如果全部執行成功,則陣列中的資料會插入到資料庫;如果陣列中的任何一條資料未能執行成功,則全部插入失敗,回滾到初始狀態。
這個情景告訴我們平時要多思考沉澱,多閱讀別人的部落格。通過思考我們可以發現別人沒有注意到的問題,通過閱讀我們可以學習到很多經典問題的解決方案。讓我們都站在巨人的肩膀上,不必在苦苦思索了很久後才發現原來此類問題早已有解決方案的囧境。
希望我的講解能對大家有所幫助。
PB事務處理
1 資料視窗更新,只要dberror有錯誤,而事先沒有做過任何commit工作,那麼rollback可以回滾到上次commit位置,即上次commit後所有的資料將被回滾。2 如果是直接寫入sql語句,只要資料庫出現錯誤,那麼rollback可以回滾到上次commit的位置,即上次commit後所有...
MySQL事務處理
start transaction,commit和rollback語法 start transaction begin work commit work and no chain no release rollback work and no chain no release set autocom...
ASP事務處理
asp事務處理。測試資料庫為sql server,伺服器為本機,資料庫名為test,表名為a,兩個欄位id int 主鍵標識,num int set conn server.createobject adodb.connection strconn provider sqloledb.1 persi...