首先是我所作的b/s軟體需要多種資料庫的支援,其中就包括access資料庫。而為了達到快的速度,必須把access的連線放入資料庫連線池,所以我專門給access做了個資料庫連線池。
問題出現了:「就是用access連線池的時候,有的時候會出現修改過的資料不能及時的反應到介面上來。」
剛開始我以為是我的access連線池寫的有問題,於是是大找特找就是找不到原因,後來我乾脆不用池,直接自己new乙個全域性連線放在靜態變數裡看一下會不會有問題,結果顯示完全沒有問題。
接著我又new 了兩個連線放在靜態變數裡 conn1 和 conn2 , 然後讓conn1做了乙個update資料操作,conn2又立馬獲取update的值,結果顯示 獲取的資料還是update前的資料, 然後過3到5秒 再讓conn2去獲取update的值 才能看到已經修改了。
於是我得出這樣的結論,access資料庫的多個連線情況下,其中某乙個連線進行了修改操作需要過3到4秒才能反映到其他連線裡來
oledbconnection connforupdate = new oledbconnection(connstr);
oledbconnection connforselect = new oledbconnection(connstr);
oledbcommand cmd;
object resultvalue;
tryfinally
}此**的結果是:
修改前:6
修改後:6
最終結論是,access確實不能很好的實現連線池。 沒法子,只能是變相的解決問題了。
我這裡給出access操作的幾個可以提高速度方法:
1.讓某些只是提取操作的單步業務使用同乙個鏈結, 該連線因為都是單步提取資料,所以「不是即時性」的資料問題不大,如:獲取點選數、查詢等等都使用同乙個連線,此conn保持狀態不要關閉。
2.如果是非單步的業務就要使用完了連線及時關閉,不然會出現看不到剛剛更新過的資料,如:新增一條記錄,新增完後要顯示此記錄的結果,由於是兩張頁面所以保證第一張頁面的conn關閉了,第二張頁面new出來,就沒有問題。
3.這裡可以思考這樣的連線池,在conn返回到連線池的時候會把conn和session繫結起來,在需要獲取乙個連線的時候,先要判斷所有和session繫結的conn,繫結時間在5秒前的就取消繫結,並把連線放回到freelist列表裡,然後是根據傳進來sessionid,如果在和session繫結的conn集合中能夠找到相同的id那麼就再次使用這個conn。如此這般便也可以算是乙個連線池。
Access資料庫連線池
access資料庫沒有資料庫連線池,每次開啟和關閉資料庫時都非常耗時,自己編寫了乙個簡易的資料庫連線池,新增資料庫型別還可支援其他沒有資料庫連線池的資料庫型別。該資料庫連線池要求必須更改web.config中的資料庫連線字串,新增max pool size及connect timeout兩個屬性,如...
Access資料庫連線池
access 資料庫沒有資料庫連線池,每次開啟和關閉資料庫時都非常耗時,自己編寫了乙個簡易的資料庫連線池,新增資料庫型別還可支援其他沒有資料庫連線池的資料庫型別。該資料庫連線池要求必須更改 web.config 中的資料庫連線字串,新增 max pool size 及connect timeout ...
資料庫連線池問題
1 伺服器啟動後,客戶端一段時間不做任何操作,資料庫連線會自動斷開。解決方法 c3p0連線池自帶有自動檢測斷開鏈結功能,不需要配置,而hibernate沒有,需要配置 true 檢測到連線斷開自動連線 連線池預設超時時間是8小時,如果連線閒置8小時 8小時內沒有進行資料庫操作 資料庫就會自動斷開連線...