a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 數據庫 > Access > 正文

Access數據庫連接池問題

2023-05-11 12:02:30
字體:
來源:轉載
供稿:網友

首先是我所作的B/S軟件需要多種數據庫的支持,其中就包括Access數據庫。而為了達到快的速度,必須把access的連接放入數據庫連接池,所以我專門給access做了個數據庫連接池。

問題出現了:“就是用access連接池的時候,有的時候會出現修改過的數據不能及時的反應到界面上來。”

剛開始我以為是我的access連接池寫的有問題,于是是大找特找就是找不到原因,后來我干脆不用池,直接自己new一個全局連接放在靜態變量里看一下會不會有問題,結果顯示完全沒有問題。

接著我又new 了兩個連接放在靜態變量里  conn1 和  conn2   ,  然后讓conn1做了一個update數據操作,conn2又立馬獲取update的值,結果顯示 獲取的數據還是update前的數據,  然后過3到5秒 再讓conn2去獲取update的值 才能看到已經修改了。

于是我得出這樣的結論,access數據庫的多個連接情況下,其中某一個連接進行了修改操作需要過3到4秒才能反映到其他連接里來.如果這個結論被確定那就是說access無法實現傳統上的數據庫連接池。

于是我想會不會是我的數據庫操作代碼有問題,于是我干脆用兩臺電腦做測試,分別在兩臺電腦上用office打開同一個access數據庫,然后在其中一臺上修改了某個數據,另外一臺上立馬打開改數據,結果顯示 數據還是沒有更新。  靠。從目前來看我上面的結論是符合實際的。

如果真的這個結論被坐實的話,就像我上面說的,“access無法實現 傳統上的 數據庫連接池”。那麻煩就大了,因為其他數據庫連接池,如:sqlserver,是可以用的,而access不能用,那么可能需要更多的代碼區分開來編寫。

于是我又想,會不會是使用access連接的時候有沒有什么特殊的屬性(或者說方式),才能保證多個access連接能及時的反應信息。

這里付上操作數據庫的代碼:

說明:test.mdb中一個表,test 表,中間有兩個自段id 和num 都是數字。記錄就一條:id=1  num=1

protected void LinkButton11_Click(object sender, EventArgs e)
    {
        String connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("/test.mdb") + ";Persist Security Info=True;";
        String selectSql = "select [num] from  [test] where [id]=1";
        String updateSql = "Update [test] set [num]=[num]+1 where [id]=1";

OleDbConnection connForUpdate = new OleDbConnection(connStr);
        OleDbConnection connForSelect = new OleDbConnection(connStr);
       
        OleDbCommand cmd;
        Object resultValue;

        try
        {
            connForUpdate.Open();
            connForSelect.Open();

            //修改前提取
            cmd = new OleDbCommand(selectSql, connForSelect);
            resultValue = cmd.ExecuteScalar();
            Response.Write("修改前:" + resultValue);
            Response.Write("<br/>");

            resultValue = null;

            //執行修改
            cmd = new OleDbCommand(updateSql, connForUpdate);
            cmd.ExecuteNonQuery();

            //修改后提取
            cmd = new OleDbCommand(selectSql, connForSelect);
            resultValue = cmd.ExecuteScalar();
            Response.Write("修改后:" + resultValue);

        }
        finally
        {
            connForSelect.Close();
            connForUpdate.Close();
        }
    }

此代碼的結果是:
修改前:6
修改后:6
 

最終結論是,Access確實不能很好的實現連接池。 沒法子,只能是變相的解決問題了。

我這里給出Access操作的幾個可以提高速度方法:

1.讓某些只是提取操作的單步業務使用同一個鏈接, 該連接因為都是單步提取數據,所以“不是即時性”的數據問題不大,如:獲取點擊數、查詢等等都使用同一個連接,此conn保持狀態不要關閉。

2.如果是非單步的業務就要使用完了連接及時關閉,不然會出現看不到剛剛更新過的數據,如:新增一條記錄,新增完后要顯示此記錄的結果,由于是兩張頁面所以保證第一張頁面的conn關閉了,第二張頁面new出來,就沒有問題。

3.這里可以思考這樣的連接池,在conn返回到連接池的時候會把conn和session綁定起來,在需要獲取一個連接的時候,先要判斷所有和session綁定的conn,綁定時間在5秒前的就取消綁定,并把連接放回到freelist列表里,然后是根據傳進來sessionID,如果在和session綁定的conn集合中能夠找到相同的id那么就再次使用這個conn。如此這般便也可以算是一個連接池。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 91在线 | 亚洲 | 亚洲精品乱码久久观看网 | 久久免费视频一区二区 | 欧美日韩亚洲国产 | 中文字幕亚洲欧美精品一区四区 | 国产精品成av人在线视午夜片 | 国产在线一二三区 | 午夜精品久久久久久久久久久久久 | 久久com | 在线播放91 | 大香伊在人线免97 | 亚洲高清视频一区 | 中国一级免费毛片 | www.狠狠干 | 日本综合在线 | 久久久一| 中文字幕日韩在线 | 一区二区三区视频 | 久久综合九色综合欧美狠狠 | 亚洲瑟瑟 | 最新高清无码专区 | 久久久久国产精品午夜一区 | 一本之道高清码 | 日韩精品在线观看一区 | 黄色一级免费大片 | 国产视频一区二区 | 日本激情在线 | 久久久精品一区二区 | 毛片大全 | 密色视频 | 久草福利在线视频 | 日韩成人免费 | 99久久精品久久亚洲精品 | 美女爽到呻吟久久久久 | 日韩精品一区二区三区中文字幕 | 国产一区二 | 国产精品久久久久久一区二区三区 | 91精品国产乱码久久久久久久久 | 成人a视频在线观看 | 欧美中文在线 | 午夜精品美女久久久久av福利 |