如何正確操作ADO數(shù)據(jù)庫創(chuàng)建說明
在公司技術(shù)人員進行對ADO數(shù)據(jù)庫操作時,特別是企業(yè)級的數(shù)據(jù)庫應(yīng)用,就不得不提一個多人操作時經(jīng)常會產(chǎn)生的問題——并發(fā)沖突。本文首先來看一下什么是并發(fā)沖突,傳統(tǒng)的并發(fā)沖突有現(xiàn)有的處理方式。
一、要完成本文中的實例,您需要作如下準備:
將Visual Studio 2008及.NET Framework 3.5升級到SP1。點擊轉(zhuǎn)到升級地址。 安裝SQL SERVER 2005,VS 2008中自帶的EXPRESS版的SQL SERVER應(yīng)該也可以用。 下載并附加數(shù)據(jù)庫:點擊下載DemoDbV2。 創(chuàng)建一個VB Console Application,并且取一個合適的名字(例如:Concurrency之類的)。注意,目標Framework要設(shè)置成3.5版。
二、什么是并發(fā)沖突
讓我們來看一個跟取款相關(guān)的例子:某年某月某日某時某分,ADO數(shù)據(jù)庫老王在A取款機取錢,他兒子小王同時在B取款機取錢(不要問我為什么這么巧^_^),他倆從同一個賬號上取。于是就發(fā)生了如下一序列的操作:
A取款機向中央數(shù)據(jù)庫提問:這賬上還有多少錢?
B取款機向中央數(shù)據(jù)庫詢問:這賬上還有多少錢? 中央數(shù)據(jù)庫回答A取款機:2W,中央數(shù)據(jù)庫回答B(yǎng)取款機:2W,然后,ADO數(shù)據(jù)庫老王對A取款機說:我要取出1.5W。 同時,小王對B取款機說:我要取出1.8W。 #t#
A取款機就算了一下,2W-1.5W=0.5W>0,于是就吐出1.5W現(xiàn)金給了老王,并且準備告訴中央數(shù)據(jù)庫,現(xiàn)在還剩0.5W啦。但是,就在它告訴中央數(shù)據(jù)庫之前,發(fā)生了以下的事情:
B取款機計算了一下,2W(此時,它還不知道余額已經(jīng)成0.5W了,因為A取款機還沒有告訴中央數(shù)據(jù)庫)減去1.8W等于0.2W大于0,于是就吐出1.8W現(xiàn)金給了小王。然后,ADO數(shù)據(jù)庫當然也要知會中央數(shù)據(jù)庫。
中央數(shù)據(jù)庫于是收到A取款機的消息,說,這個賬號還剩0.5W,于是刷新余額為0.5W。然后又收到B取款機說還剩0.2W,于是,就刷新余額為0.2W。 呵呵,于是,小王+老王的賬戶里一共存有2W元,結(jié)果老王取了1.5W元,小王取了1.8W元,賬戶里卻還剩了0.2W元。
這就是一種并發(fā)沖突,由于同一時間有兩個或者多個端在對同一數(shù)據(jù)進行操作,ADO數(shù)據(jù)庫從而導(dǎo)致數(shù)據(jù)發(fā)生了錯誤。如果取款機真的以這樣的方式來處理并發(fā),那么,我現(xiàn)在就不寫這片文章了——趕緊發(fā)動全家對表,說好了在某一時刻同時取錢去。