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