1. asp.net 資料庫並發
我個人喜歡把並發分成三類:
資料庫級別的並發:這發生在多個系統事務在同一時間試圖操作同樣的數據的
時候,此時往往通過事務的隔離級別來解決.隔離級別過小會使數據不安全,而隔離級別過大又會降低資料庫性能.因此大部分資料庫將隔離級別設置成Read Committed,意思就是說一個事務在執行過程中可以得到其他事務已經提交的更新(注意是更新而不是插入). 而此時為了在一個事務內的多次查詢中獲得同樣的數據,我們往往還需要將這多個查詢放在一個只讀事務里.
代碼級別的並發:這發生在某個類中具有不安全因素(例如具有多個線程都可以修改的類變數),而這個類又處在多線程訪問的模式下. 此時我們往往通過具體語言提供的同步機制來解決,在安全的同時也降低了性能,因為一個線程在訪問時其他線程必須等待.
應用程序級別的並發: 這發生在多個業務事務同一時間操作同樣的數據的時候,這會帶來丟失更新和不一致讀,在對數據的實時性要求不是很高的系統中,不一致讀往往不是問題,用戶也不會覺得不合理. 而在用戶操作數據時發生丟失更新往往不能忍耐. 此時我們的解決方案是應用程序級別的鎖定. 一種是樂觀鎖,通過給記錄加版本號,在操作提交時如果發現在操作期間其他人修改過該條記錄,則提示用戶更新失敗. 這適合在並發機率很低的情況使用,因為用戶很可能填了一堆東西你卻告訴他失敗需要重填,他會發瘋. 另一種是悲觀鎖,通過嚴格限制來避免沖突. 悲觀鎖分為寫鎖和讀鎖,寫鎖很簡單,一個人在操作一條記錄的時候其他人只能讀該記錄,而不能操作. 而讀鎖很嚴格,它又分為共享讀鎖和獨占讀鎖,共享讀鎖指一個人只要在讀該記錄的時候,其他人就也只能讀不能操作.而獨占讀鎖是所有鎖中最嚴格的,他實現只要一個在正在讀該記錄,其他人就不能讀,這是為了保證用戶獲得的一定是最新記錄,它假定其他人只要在讀一條記錄,就可能會修改它. 因為悲觀鎖需要在操作期間不斷的加鎖解鎖,會嚴重影響性能,並且實現起來很麻煩,所以盡量少使用.
注: 系統事務指資料庫級別的事務,對應用程序來說是指在一次請求或一次方法調用的過程中發生的數據處理. 與資料庫中的事務是一個概念. 而業務事務指用戶完整執行一次業務相關的操作過程中的數據處理.一次業務事務往往包含多個系統事務,例如首先將數據查詢出來,然後修改提交,這是一次業務事務,但包含了查詢和修改兩個系統事務.
2. ASP程序如何解決多用戶的並發更新資料庫問題
好象這問題不必要考慮
我之前也考慮這問題但是後來卻發現根本是考慮多餘的
ASP是在伺服器上運行 所有的操作都是伺服器來執行
代碼只能一條一條往下 而伺服器只有一個 所以不會存在這個問題
這只是我認為
3. 資料庫連接出錯,請檢查資料庫連接文件中的資料庫參數設置
錯誤提示:資料庫連接出錯,請檢查Conn.asp 文件中的資料庫參數設置。錯誤原因:conn.asp 中的有關資料庫參數設置不正確。解決方法:access 版要注意資料庫路徑要使用絕對路徑,SQL 版要注意把SQL2000 的身份驗證模式改成混合模式。下面這是conn.asp中有關資料庫的設置,一定要正確!如果是ACCESS資料庫,請認真修改好下面的資料庫的文件名db = \datab……
關於 conn.asp 之己見
在asp中,為了代碼的重用,把某些程序都模塊化
比如把連接資料庫的一些代碼寫在一個文件里,在其他地方載入進來就是了,方便快捷.
在實際工作中用得也多,後來發現,以前的某些寫發是不大妥當的.
以前寫 conn.asp 的時候都這樣寫:
Quote
<%
Dim Def_Sample,Conn
Def_Path=server.MapPath("data.mdb")
Def_Sample="DBQ="+Def_Path+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};" '連接字串
Set Conn=Server.CreateObject("ADODB.CONNECTION")
Conn.Open Def_Sample'創建對象
%>
這樣在其他地方使用的時候,包含 Conn.asp 即可
同時這樣也帶來一個問題:
如果人家直接訪問你的 Conn.asp 的話,那麼建立的 conn 對象在程序中就沒有關閉,就會耗掉一些伺服器資源,如果有人建立多個連接惡意訪問的話,那麼....
伺服器的資源~~
具體資源多少,沒有測試,應該還是不少吧?
所以現在寫程序的時候都寫成 Config.asp
僅在里邊定義連接字串,在使用的時候在創建對象,使用完對象就關閉
Config.asp:
Quote
<%
Dim Def_Sample
Def_Path=server.MapPath("data.mdb")
Def_Sample="DBQ="+Def_Path+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};" '連接字串
%>
4. 資料庫連接出錯,請檢查Conn.asp文件中的資料庫參數設置。網站建設用的是KesionCMS的建站系統
你這個資料庫是絕對路徑,KS_Data必須要在iis的根目錄下(如iis指向web目錄,KS_Data必須在web目錄下),你看是不是多了一個上層目錄