제목 그대로 해보도록 하겠습니다.

기본적으로 윈도우 폼 1개를 생성하여 버튼 클릭시 MS Access 파일을 생성토록 하는 것이 최종 목표 입니다. 저는 DBConnection이라는 프로젝트명으로 생성했습니다.

아래와 같이 폼디자인을 설계했습니다. 컨트롤은 TextBox 1개(tbFilePath), Button 1개(btCreateDB), 그리고 보이지는 않지만 SaveFileDialog(sfdCreateDB)로 이루어져있습니다.


현재 우리가 목표로 하는 기능은 [DB생성]이라는 버튼을 눌렀을 때 원하는 위치에 MS Access에서 정상적으로 인식하는 mdb파일를 생성하는 것이 목표가 되겠습니다.

차후엔 생성된 이 mdb파일을 이용해서 무엇인가 작업을 할 수 있겠죠?


우리는 ADOX를 이용하여 하기때문에 먼저 참조를 추가해줘야 합니다.

Microsoft ADO Ext. 2.8 for DDL and Security 를 추가해 줍니다. 없으신 분들은 마이크로스프트 사이트에서 MDAC 2.8를 다운받으시면 되겠습니다.

다음으로는 데이터베이스에 접속하고 컨트롤할 클래스 하나 만들어보겠습니다. 폼 클래스에서 바로 해도 되지만... 별도로 빼두는 것이 다른 폼에서 이용하기 쉽게 할 수 있기 때문에 나중을 위해 빼두겠습니다.

클래스명은 cDBControl입니다.

// 네임스페이스를 추가
using ADOX;
using System.IO;

cDBControl 클래스 안에는 아래와 같은 내용을 넣어줍니다.
		private string strFilePath = "";
		private string strDBConnection = "";

		public cDBControl(string strPath)
		{
			// 파일의 경로를 저장
			this.strFilePath = strPath;
			// DB에 연결하기위한 명령줄 생성
			this.strDBConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strPath + ";";
			// 데이터베이스에 암호를 설정하고 싶다면 아래내용을 strDBConnection에 추가하면된다.
			// 예시)
			// this.strDBConnection += "Jet OLEDB:Database Password=1234";
		}

		public void funcAccessCreate()
		{
			try
			{
				FileInfo fiStaticDB = new FileInfo(this.strFilePath);
				if (!fiStaticDB.Exists)	// 파일의 유무를 확인, 없으면
				{
					// 생성
					funcCreate();
				}
				else	// 있으면
				{
					// 기존 파일을 제거
					fiStaticDB.Delete();
					// 생성
					funcCreate();
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		private void funcCreate()
		{
			try
			{
				// MDB파일을 동적으로 생성
				ADOX.CatalogClass adoxCC = new ADOX.CatalogClass();
				adoxCC.Create(strDBConnection);

				// 연결을 끊기위해 null을 할당.
				adoxCC.ActiveConnection = null;
				adoxCC = null;

				// 연결을 끊었다고 adoxCC = null을 해줘도 가비지컬렉션이 작동안하면,
				// 프로그램 실행 중에는 언제될지 모른다. 수동으로 가비지컬렉션 작동
				GC.Collect();
			}
			catch (Exception ex)
			{
				throw new Exception("데이터베이스를 생성 중 에러 발생.", ex);
			}
		}

 

그리고 혹시 특이사항으로...
cAccessCarete 메소드의 CatalogClass 부분에서 에러가 발생할 경우 아래처럼 해결해주시면 되겠습니다.


3번박스의 ADOX를 클릭 후 4번박스의 True를 False로 변경하시면 되겠습니다.

완성된 cDBControl.cs는 그대로 두고 다시 첫 메인 폼으로 이동해서 버튼 클릭시 발생하는 이벤트메소드를 생성해줍니다.

        private void btCreateDB_Click(object sender, EventArgs e)
        {
			// SaveFileDialog에서 예를 누를 경우
            if (sfdCreateDB.ShowDialog() == DialogResult.OK)
            {
				string strFilePath = sfdCreateDB.FileName;
                cDBControl cdbc = new cDBControl(strFilePath);	// DBControl 클래스 생성
				cdbc.funcAccessCreate();	// Access DB를 생성
                tbFilePath.Text = strFilePath;	// 화면상의 텍스트박스에 경로를 보여줌
            }
        }

 

아차차..

그리고 SaveFileDialog 컨트롤을 선택해서 Filter부분에

MS Access 파일|*.mdb
을 넣어주세요


이제 컴파일 하여 실행시켜보세요.

그리고 버튼을 클릭하면 SaveFileDialog가 뜨면서.. 파일이름을 정해주고

저장버튼을 누르면 저장된 파일의 경로가 TextBox에 뜨면서...


아래와 같이 저장되어있음을 알 수 있습니다.
(여기서는 abc라는 이름을 사용했습니다.)
(위의 Filter를 설정해줘야 자동으로 mdb로 저장됩니다.)


여기까지 입니다.