Feedback

Access Datenbank komprimieren und reparieren

Sprache: C#

Access Datenbank komprimieren und reparieren
/// <summary>
/// Compacts the access DB.
/// </summary>
/// <param name="connectionString">The connection string.</param>
/// <param name="filename">The filename.</param>
public static void CompactAccessDB(string connectionString, string filename)
{
    object objJRO = Activator.CreateInstance(Type.GetTypeFromProgID("JRO.JetEngine"));
    object[] oParams = new object[] { connectionString, "Provider=Microsoft.Jet.OLEDB.4.0;Data" + " Source=C:\tempdb.mdb;Jet OLEDB:Engine Type=5" };

    objJRO.GetType().InvokeMember("CompactDatabase", BindingFlags.InvokeMethod, null, objJRO, oParams);

    File.Delete(filename);
    File.Move("C:\tempdb.mdb", filename);

    Marshal.ReleaseComObject(objJRO);
}
/// <summary>
/// Compacts the access DB.
/// </summary>
/// <param name="connectionString">The connection string.</param>
/// <param name="filename">The filename.</param>
public static void CompactAccessDB(string connectionString, string filename)
{
    object objJRO = Activator.CreateInstance(Type.GetTypeFromProgID("JRO.JetEngine"));
    object[] oParams = new object[] { connectionString, "Provider=Microsoft.Jet.OLEDB.4.0;Data" + " Source=C:\tempdb.mdb;Jet OLEDB:Engine Type=5" };

    objJRO.GetType().InvokeMember("CompactDatabase", BindingFlags.InvokeMethod, null, objJRO, oParams);

    File.Delete(filename);
    File.Move("C:\tempdb.mdb", filename);

    Marshal.ReleaseComObject(objJRO);
}

3 Kommentare

  1. Kleines Update.

    Seit Windows 7 ist es mit den Schreibrechten unter „C:\..“ nicht mehr so einfach. Besser ist es, das Benutzerverzeichnis zu verwenden.
    Den temporären Pfad würde ich nicht mehr so festlegen: „C:\tempdb.mdb“
    Stattdessen würde ich es so lösen: string pathTempDB = Path.GetTempPath() + „tempdb.mdb“;

    object[] oParams = new object[] { connectionString, „Provider=Microsoft.Jet.OLEDB.4.0;Data “ + pathTempDB +“; Jet OLEDB:Engine Type=5″ };

  2. Ich will nicht kleinlich sein, aber das Problem besteht schon seit Vista – denn dort wurde die UAC eingeführt.
    Und fürs verbinden von Pfadteilen rate ich zur Verwendung von Path.Combine.