C# 压缩 Access 数据库

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;
            }
        }
    }

}

转载于:https://www.cnblogs.com/illusion/archive/2011/04/18/2020119.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值