728x90
728x170

Access DB 파일은 저장을 할수록 점점 사이즈가 커진다. 
Access 에서 아래 버튼을 누르면 로그등의 내용이 제거되면서 CompactDatabase 가 수행되는데

이때 사이즈가 원래 사이즈로 돌아간다.

이를 C# 코드로 처리하는 방법을 알아보자
먼저 아래처럼 참조 추가를 눌러
'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

 

위 메서드를 거치면 CompactDatabase 가 수행된다.

728x90
그리드형

'C# > Winform' 카테고리의 다른 글

[C#] BinaryWriter, BinaryReader 사용하기  (0) 2022.04.01
[C#] Property 비교 함수  (0) 2022.03.30
[C#] 한글 컨트롤  (0) 2022.03.17
[C#] 초간단 REST API 호출 코드  (0) 2022.02.22
[C#] BitmapImage(ImageSource) to Image  (0) 2022.02.18
Posted by kjun
,