public static class Util{ /// <summary> /// MBD compact method (c) 2004 Alexander Youmashev /// !!IMPORTANT!! /// !确保调用此方法前要压缩的数据库没有打开的连接,为防止万一,应在压缩前进行备份。 /// !!IMPORTANT!! /// </summary> /// <param name="connectionString"> 到源数据库的连接字符串,源数据库是指要压缩的数据库 </param> /// <param name="mdwfilename"> 目标数据库的物理文件名,含路径,目标数据库即压缩后得到的新数据库 </param> public static void CompactAccessDB( string connectionString, string mdwfilename) { object [] oParams; object objJRO = null ; try { // 创建 Jet Replication 对象的实例 objJRO = Activator.CreateInstance(Type.GetTypeFromProgID( " JRO.JetEngine " )); // 填充参数数组 // 将 "Jet OLEDB:Engine Type=5" 换成合适的值, // 如果目标数据库是 JET4X 格式 (access 2000,2002), // 那么可以保留现有的值 // (yes, jetengine5 is for JET4X, no misprint here) string tmpPath = mdwfilename.Substring( 0 , mdwfilename.LastIndexOf( " \\ " )); tmpPath += " \\ " + " tempdb.mdb " ; string destConStr = string .Format( " Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Jet OLEDB:Engine Type=5 " , tmpPath); oParams = new object [] { connectionString, destConStr }; // 调用 JRO 对象的压缩方法,并传递参数数组 objJRO.GetType().InvokeMember( " CompactDatabase " , System.Reflection.BindingFlags.InvokeMethod, null , objJRO, oParams); // 数据库已被压缩到一个新文件:C:\\tempdb.mdw // 现在可以用这个新文件覆盖旧的数据库文件 System.IO.File.Delete(mdwfilename); System.IO.File.Move(tmpPath, mdwfilename); } catch { throw ; } finally { // clean up (just in case) if (objJRO != null ) { System.Runtime.InteropServices.Marshal.ReleaseComObject(objJRO); objJRO = null ; } } }}
小小的AD: