Fly to the sky & Return

[c#] 선택된 폴더 내부에 있는 MDB 파일들 마다 들어있는 특정 테이블을 합치기 (최종완성본) 본문

프로그래밍/c# & VB 등

[c#] 선택된 폴더 내부에 있는 MDB 파일들 마다 들어있는 특정 테이블을 합치기 (최종완성본)

낼은어떻게 2016. 4. 4. 14:25
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

날짜별로 정리된 데이터 백업본이있을때   이것을 하나의 파일로 합치는 과정이라 볼수 있습니다.

일단 테이블의 구조는 모두 같아야 합니다. 그리고 중복이 일이날수 도 있으므로 기본키등이설정되어 있는경우는 에러가 납니다.   

기본키 설정을 해제해도 무방한 경우 진행을 해야합니다.

각 테이블관의 관계가 설정되어 있는 경우가 에러가 발생합니다..  관계를 삭제했다가 추후에 복원할수 있다면  삭제 후 진행하시기 바랍니다.

기본키삭제나 관계 삭제가 불가능한 경우는 다른 방법을 찾으셔야 합니다.


다음 소스는  기본키 설정 헤제 및 테이블관의 관계를 삭제한 후 진행하는 소스입니다.


기본적으로  INSERT INTO query를 사용합니다.

1
  string sql = @"insert  into target_table select * from [" + db_path2 + "; PWD =].[test_table] "// test_table의 데이터를 target_table로 insert  
cs


 target_table이 들어있는 mdb 파일을 기본 연결로 설정한 후    query를 실행합니다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;
using System.IO;
 
namespace mdb_table_insert
{
    public partial class Form1 : Form
    {
        public string db_path = @"c:\test\target_DB.mdb";
        public string db_path2;
        public Form1()
        {
            InitializeComponent();
        }
 
       
 
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                string startupPath = Application.StartupPath;
                using (FolderBrowserDialog dialog = new FolderBrowserDialog())
                {
                    dialog.Description = "Open a folder which contains the MDB output";
                    dialog.ShowNewFolderButton = false;
                    dialog.RootFolder = Environment.SpecialFolder.MyComputer;
                    if (dialog.ShowDialog() == DialogResult.OK)
                    {
                        string folder = dialog.SelectedPath;
                        foreach (string fileName in Directory.GetFiles(folder, "*.mdb", SearchOption.TopDirectoryOnly))
                        {
 
                            db_path2 = fileName;
                            string connStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + db_path + ";Jet OLEDB:Database Password=";
                            OleDbConnection conn = new System.Data.OleDb.OleDbConnection(connStr);
                            OleDbCommand cmd = new OleDbCommand();
                            cmd.Connection = conn;
                            conn.Open();
                            string sql = @"insert  into target_table select * from [" + db_path2 + "; PWD =].[test_table] "// test_table의 데이터를 target_table로 insert 
 
 
                            cmd.CommandText = sql;
                            cmd.ExecuteNonQuery();
 
                            conn.Close();
 
 
                        }
                    }
                }
 
            }
            catch (System.Data.OleDb.OleDbException E)
            {
                MessageBox.Show(E.ToString());
            }
 
            MessageBox.Show("완료");
        }
    }
}
 
 
 
 
cs


이 소스를 이용하여  약 200개의  mdb파일을 합치는 작업을 완료하였습니다.   각 파일에는 2개의 테이블만 존재하는 터라   한개 작업하고  테이블 이름 변경후에 또 작업하는 방법을 취했는데   테이블이 여러개가 있다면 순환문을 이용해서 적용하는 것도 한 방법이 될것 같습니다.