本文實例講述了C#使用晚綁定來實現壓縮Access數據庫的方法,通常來說VB對Com后期綁定支持得很好,在C#中可以使用反射來實現。具體方法如下:
函數實現代碼如下:
public static void CompactAccessDB(string strMdbName){ string TempMdbName = Application.StartupPath + @"/Temp.mdb"; //創建 Jet 引擎對象 object objJetEngine = Activator.CreateInstance(Type.GetTypeFromProgID("JRO.JetEngine")); //設置參數數組 //根據你所使用的Access版本修改 "Jet OLEDB:Engine Type=5" 中的數字. //5 對應 JET4X 格式 (access 2000,2002) object[] objParams = new object[] { String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}",strMdbName), //輸入連接字符串 String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Jet OLEDB:Engine Type=5",TempMdbName) //輸出連接字符串 }; //通過反射調用 CompactDatabase 方法 objJetEngine.GetType().InvokeMember("CompactDatabase", System.Reflection.BindingFlags.InvokeMethod, null, objJetEngine, objParams); //刪除原數據庫文件 System.IO.File.Delete(strMdbName); //重命名壓縮后的數據庫文件 System.IO.File.Move(TempMdbName, strMdbName); //釋放Com組件 System.Runtime.InteropServices.Marshal.ReleaseComObject(objJetEngine); objJetEngine = null;}
那么為什么要使用晚綁定呢?可以直接在項目中添加對 JRO.JetEngine 組件的引用來實現。
在多人協作的開發環境中,添加引用需要簽出項目文件進行修改.如果有組員機器上沒有這個組件,她就會無法編譯改動后程序.
而采用這種方式就很方便,復制過去就能用.不需要對項目進行修改.
雖然晚綁定有小小性能損失,換來的方便性還是劃算的. 而且也不是經常會用到這個功能.
對于有密碼的access文件怎么處理呢?
很簡單的,就是在輸入連接字符串中增加密碼的設置即可。
這樣默認壓縮后的mdb就沒有密碼,如果希望壓縮后的mdb也有密碼,就在輸出的連接字符串里面增加密碼設置即可.
這個方法其實也可以用來修改mdb的密碼,取消mdb密碼,給mdb設置密碼.
新聞熱點
疑難解答