A. Access資料庫文件過大,壓縮了好久還是超過50m怎麼辦
1、經實踐總結,當Access資料庫超過50M時,網站的整體響應會變得非常緩慢,同時也會影響伺服器上內其他網站的性能。如果容數據非常大,建議你升級為SQL Server資料庫。
2、如果你的網站中有留言本等交互性頁面,務必設置驗證碼等防護措施,以免被黑客灌入大量數據,出現資料庫持續變大的不利情況。
3、我們在設計程序時,注意在頁面的尾部加上資料庫關閉代碼,有利於網站的良好運行。代碼示例如下:
Rs.Close
Set Rs=Nothing
Conn.Close
Set Conn=Nothing
B. 怎麼解決ACCESS資料庫太大造成運行慢的問題
1.時候在使用Access文件的時候,隨著增刪改的不斷的連續,會導致文件越來越大。即使手動刪除或者使用delete語句刪除了大量的數據記錄,會發現文件的大小依然沒有減掉,而且隨著你再往裡寫數據,又會增大。
2.產生這個現象的原因跟Access本身的機制有關,具體也不清楚,好像是有什麼歷史記錄還是什麼存儲碎片。ACCESS資料庫在進行刪除操作後,並不從該資料庫中把數據清除掉,而是刪除其索引相關的東西,雖然顯示不出來,但是那些東西還是在文件中存在的,所以會引起ACCESS資料庫文件越來越大。即使是我們不通過代碼來訪問access文件,而只是通過用戶界面訪問,隨著文件的增大,也會帶來一系列的問題。其症狀包括:對象可能打開得更慢,查詢可能比正常情況下運行的時間更長,各種典型操作通常似乎也需要使用更長時間。更何況如果在網站應用中,採用的是Access作為資料庫的話,這里就有了性能上的問題。文件越來越大,會影響查詢的速度,而且ACCESS是採用獨占方式工作的,也就是說一次只能一個進程打開這個資料庫執行操作,如果是多個用戶的話就要"排隊"了,所以ACCESS資料庫如果變為很大的話,執行一個查詢時間就會變長,而進程"排隊"的等待時間也就會變得很久,專業型的資料庫就不同,可以同時接收多個並發的訪問,可以採用SQL資料庫或其它大型並發數很強的資料庫。
3.但是很多時候我們是需要Access文件,往不同的地方拷貝的,比如說,一個Server上生成了一個Access文件,需要拷貝到另外的Server上,而且Server間如果網速不是很好的話,會需要很長的時間來傳輸這個文件。所以這時候我們希望這個文件在內容不變的前提下,越小越好。所以我們可以去除這個Access的冗餘信息。
4.Office Access本身就有這種功能,我們可以通過菜單找到這個工具,然後單擊這個圖標手動壓縮。
5.執行以下這幾句代碼就可以了。
首先引用C:Program FilesCommon FilesSystemadomsadox.dll,該DLL包含ADOX命名空間;
接著引用C:Program FilesCommon FilesSystemadomsjro.dll,該DLL包含JRO命名空間
注意:如,導入dll不成功,手動把com組件 導入為 .net組件,在用vs.net工具導入
///壓縮修復ACCESS資料庫,mdbPath為資料庫絕對路徑
public void Compact(string mdbPath)
{
if (!File.Exists(mdbPath)) //檢查資料庫是否已存在
{
throw new Exception("目標資料庫不存在,無法壓縮");
}
//聲明臨時資料庫的名稱
string temp = DateTime.Now.Year.ToString();
temp += DateTime.Now.Month.ToString();
temp += DateTime.Now.Day.ToString();
temp += DateTime.Now.Hour.ToString();
temp += DateTime.Now.Minute.ToString();
temp += DateTime.Now.Second.ToString() + ".bak";
temp = mdbPath.Substring(0, mdbPath.LastIndexOf("\") + 1) + temp;
//定義臨時資料庫的連接字元串
string temp2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + temp;
//定義目標資料庫的連接字元串
string mdbPath2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath + ";Jet OLEDB:Database Password=l1epc2";
//創建一個JetEngineClass對象的實例
JetEngineClass jt = new JetEngineClass();
//使用JetEngineClass對象的CompactDatabase方法壓縮修復資料庫
jt.CompactDatabase(mdbPath2, temp2);
//拷貝臨時資料庫到目標資料庫(覆蓋)
File.Copy(temp, mdbPath, true);
//最後刪除臨時資料庫
File.Delete(temp);
}
C. ACCESS資料庫變的非常大,如何瘦身
壓縮一下就好了。
或者直接把後綴改成cab,使用的時候使用ACCESS打開。
ACCESS軟體包括很多多餘的後台處理代碼,每一個視圖生成過程都會有很多未清理得痕跡,你可以做個實驗,拖放一個按鈕到窗體上,查看他的代碼,你會發現他已經再後台生成了一堆代碼。壓縮得目的,就是處理這些冗餘分配空間。