Asp
---------------------------------------------------------------------------
Dim rs
set rs =
Server.CreateObject("ADODB.Recordset")
on error resume
next
conn.Begintrans
sql=
" 資料庫語法“
conn.execute(sql)
if err.number=0 then
conn.CommitTrans
else
conn.RollbackTrans
end if
Asp.net
---------------------------------------------------------------
SqlConnection sqlConn = DB.Conn();
sqlConn.Open();
SqlTransaction sqlTrans = sqlConn.BeginTransaction();
SqlCommand sqlComm.Connection = sqlConn;
sqlComm.Transcation = sqlTrans;
sqlConn = DB.Conn();
sqlConn.Open();
sqlTrans = sqlConn.BeginTransaction();
sqlComm.Connection =
sqlConn;
sqlComm.Transcation =
sqlTrans;
try{
for(;;){
strInsertion = "資料庫語法";
sqlComm.CommandText = strInsertion;
sqlComm.ExcuteNonQuery();
}
sqlTrans.Commit();
}
catch{
sqlTrans.Rollback();
}
finally{
sqlConn.Close();
}
狼.眼裡的世界
※其他人的備註
2011/08/20 新增關於BeginTransaction, Rollback, Commit的測試:
問題:在寫入資料表的時候關掉網頁,對資料表的狀態?
測試方式:
寫一隻無限迴圈程式,不斷讓程式對資料表寫不同的資料,
然後在執行的過程中關掉網頁。
測試結果:
一開始寫程式的時候沒有用try-catch-finally,所以直接把網頁關掉,資料表會被lock起來,強制把IDE的模擬Server程式關掉後才得以解開。資料沒有寫進去。
後來加入try-catch-finally後,執行的過程把網頁關掉,再去查詢資料表,是可以運作的。資料也沒有寫進去,
由測試結果的推論:
try-catch-finally,是去執行try裡面的動作,遇到Exception的時候再強制跳到catch,無論try完或是catch完,最後都執行finally。直接把網頁關掉,也能夠用這個方式catch出來。
SQL的做法應該是在先把資料表的狀態lock住,然後對資料表的修改和寫入都是寫到一個暫存的地方,等到下commit指令以後,才把結果一次倒進資料表裡。總之,今天討論到,如果程式執行很久,使用者在不知情(或是手賤)的情況下關掉網頁,以這種做法來說,不用擔心資料表會被持續lock住。