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);
}
Alte URL:
/snippet/access-datenbank-komprimieren-und-reparieren/533
Wie lange ich danach gesucht habe… Vielen Dank für deinen Post, werde ich direkt mal einbauen in mein Programm.
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″ };
…
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.