C# 压缩 Access 数据库
时间:2011-04-18 来源:the illusion
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; } } } }
相关阅读 更多 +