Feedback

C# - Access Datenbank komprimieren und reparieren

Veröffentlicht von am 5/10/2007
(2 Bewertungen)
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);
}
Abgelegt unter Access, komprimieren, reparieren.

3 Kommentare zum Snippet

xFight schrieb am 4/20/2011:
Wie lange ich danach gesucht habe... Vielen Dank für deinen Post, werde ich direkt mal einbauen in mein Programm.
Martin Dauskardt schrieb am 1/13/2016:
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" };
...
Koopakiller schrieb am 1/13/2016:
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.
 

Logge dich ein, um hier zu kommentieren!