본문 바로가기
C#.Net

C#에서 MS Access 파일 압축

by 호야호잇 2024. 7. 28.

 

1. MDB 파일

 

먼저 참조추가에서 COM 탭에 있는 Microsoft Jet and Replication Objects 2.6 Library를 추가한다.

JRO.JetEngineClass jro = new JRO.JetEngineClass();
jro.CompactDatabase("Provider=Microsoft.jet.OLEDB.4.0;Data Source=압축할MDB", "Provider=Microsoft.jet.OLEDB.4.0;Data Source=압축후MDB");

 

출처: https://jasmintime.com/57 [Jasmin Time:티스토리]

 

2. ACCDB 파일

 

'Microsoft Office 16.0 Access Database Engine Object Library' 항목을 추가한다

 

using System.IO;
using Microsoft.Office.Interop.Access.Dao;

		#region CompactAccessDB
        /// <summary>
        /// CompactDatabase 를 수행합니다.
        /// </summary>
        public static void CompactAccessDB(string dbFilePath)
        {
            try
            {
                if (!File.Exists(dbFilePath))
                {
                    return;
                }
                
                DBEngine dbEngine = new DBEngine();

                string directroy = Path.GetDirectoryName(dbFilePath);
                string filename = Path.GetFileNameWithoutExtension(dbFilePath);
                string extension = Path.GetExtension(dbFilePath);

                string compactFilePath = Path.Combine(directroy, filename + "_temp" + extension);
                string password = "1234";

                // 오류로 인해 temp 파일이 제거 되지 않은 경우 대비
                if (File.Exists(compactFilePath))
                {
                    File.Delete(compactFilePath);
                }

                dbEngine.CompactDatabase(dbFilePath, compactFilePath, false, false, "MS Access;PWD=" + password);

                File.Delete(dbFilePath);
                File.Move(compactFilePath, dbFilePath);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion