C#圧縮アクセスデータベース

2133 ワード

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;

            }

        }

    }



}