2009-12-08 11 views

Répondre

4

Vous pouvez essayer quelque chose comme ça

public static void CompactAndRepair(string accessFile, Microsoft.Office.Interop.Access.Application app) 
     { 
      string tempFile = Path.Combine(Path.GetDirectoryName(accessFile), 
           Path.GetRandomFileName() + Path.GetExtension(accessFile)); 

      app.CompactRepair(accessFile, tempFile, false); 
      app.Visible = false; 

      FileInfo temp = new FileInfo(tempFile); 
      temp.CopyTo(accessFile, true); 
      temp.Delete(); 
     } 

Voir aussi Use the CompactRepair method of the Application object to compact and repair the database

+0

Je me demande si l'ajout d'une référence à Microsoft.Office.Interop.Access.Application à votre application pourrait lier une version spécifique du bureau. La solution Code Project ci-dessous utilisera la liaison dynamique pour éviter cela. –

1

i utilisé l'article à:
Compact and Repair an Access Database Programmatically Using C#

je l'ai modifié un peu pour le rendre plus simple à utiliser:

public static bool CompactAndRepairAccessDB(string source, string destination) 
{ 
    try 
    { 
     JetEngine engine = (JetEngine)HttpContext.Current.Server.CreateObject("JRO.JetEngine"); 
     engine.CompactDatabase(string.Format("Data Source={0};Provider=Microsoft.Jet.OLEDB.4.0;", source), 
      string.Format("Data Source={0};Provider=Microsoft.Jet.OLEDB.4.0;", destination)); 
     File.Copy(destination, source, true); 
     File.Delete(destination); 
     return true; 
    } 
    catch 
    { 
     return false; 
    } 
} 

Ne pas oublier:
Clic droit de référence dans la solution Explorer -> Ajouter Référence -> COM -> recherche 'jet' -> Ajouter « Microsoft Jet et les objets de réplication ... »

et aussi ajouter:

using System.IO; 
using JRO; 
Questions connexes