C# Windows Forms DB(MS-SQL) 연동하기

2019. 12. 2. 14:13C# .NET/C#

우선 C# Windows forms 프로젝트를 하나 생성합니다.

만들어진 프로젝트에 DataGridView를 그려줍니다.

DB의 데이터를 Load할 View

DataGridView의 초기 name은 DataGridView1 입니다.

예제를 위한 DB생성

저는 EXDB라는 이름의 데이터베이스에 STUDENT 테이블을 생성하여 진행하겠습니다.

 

테이블 생성까지 완료하셨다면

다음으로는 프로그램에서 데이터베이스에 접속할 수 있도록 해주는 클래스를 만들고 코드를 작성해볼게요.

 

클래스 파일 추가 방법

새로 생성한 클래스 파일에 아래의 코드를 입력해주세요.

저는 클래스 파일명을 DBConnector.cs 로 작성했습니다. 

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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
//제가 만든 프로젝트명입니다.
namespace DBConnector_blog
{
    class DBConnector
    {
        //커넥션 객체
        private static SqlConnection conn = null;
        public static string DBConnString { get; private set; }
        public static bool bDBConnCheck = false;
        private static int errorBoxCount = 0;
 
        ///<summary>
        ///생성자
        ///</summary>
        public DBConnector() { }
        
        public static SqlConnection DBConn
        {
            get
            {
                if (!ConnectToDB())
                {
                    return null;
                }
                return conn;
            }
        }
 
        ///<summary>
        /// Database 접속 시도
        /// </summary>
        /// <returns></returns>
        public static bool ConnectToDB()
        {
            if(conn == null)
            {
                //서버명, 초기 DB명, 인증방법
                //string DBConnString = "Data Source = DB_IP주소,포트번호; Initial Catalog=테이블명; 
User ID=DB로그인 아이디; Password=비밀번호;";
                //저는 로컬DB를 사용했으니 로컬에 연결해보겠습니다.
                string DBConnString = "Data Source = (localdb)\\LOCAL_OK; Initial Catalog=EXDB;";
                conn = new SqlConnection(DBConnString);
            }
 
            try
            {
                if (!IsDBConnected)
                {
                    conn.Open();
                    
                    if(conn.State == System.Data.ConnectionState.Open)
                    {
                        bDBConnCheck = true;
                    }
                    else
                    {
                        bDBConnCheck = false;
                    }
                }
            }
            catch(SqlException e)
            {
                errorBoxCount++;
                if(errorBoxCount == 1)
                {
                    MessageBox.Show(e.Message, "DBConnector - ConnectToDB()");
                }
                return false;
            }
            return true;
        }
 
        ///<summary>
        /// Database Open 여부 확인
        /// </summary>
        public static bool IsDBConnected
        {
            get
            {
                if(conn.State != System.Data.ConnectionState.Open)
                {
                    return false;
                }
                return true;
            }
        }
 
        /// <summary>
        /// Database 해제
        /// </summary>
        public static void Close()
        {
            if (IsDBConnected) DBConn.Close();
        }
    }
}

 

여기까지 잘 따라오셨나요? 

그럼 이제 아까 DataGridView를 그려놓은 Form에 아래와 같이 작성해 주세요.

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
using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
 
namespace DBConnector_blog
{
    public partial class Form1 : Form
    {
        private DataTable data_table = null;
        
        public Form1()
        {
            InitializeComponent();
 
            try
            {
                lock (DBConnector.DBConn)
                {
                    if (!DBConnector.IsDBConnected)
                    {
                        MessageBox.Show("Database 연결을 확인하세요.");
                        return;
                    }
                    else
                    {
                        //DB연결이 되고 난 후...
                        String sql = "select * from STUDENT";
                        SqlDataAdapter adapter = new SqlDataAdapter(sql, DBConnector.DBConn);
                       data_table = new DataTable();
 
                        try
                        {
                            adapter.Fill(data_table );
                            dataGridView1.DataSource = data_table ;
 
                            //DataGridView 사이즈에 맞게 자동 조정
                            dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
                        }
                        catch (Exception e)
                        {
                            MessageBox.Show(e.Message, "DataGridView_Load Error");
                        }
                        DBConnector.Close();
                    }
                }
            }
            catch (ArgumentNullException ane)
            {
                MessageBox.Show(ane.Message, "DataGridView_Load Error");
            }
        }
    }
}

 

이제 모든 작업이 완료 되었습니다.

한번 실행을 시켜볼게요.

실행결과

DataGridView는 DB에서 데이터를 가져온 그대로 표로 정리해서 바로 보여줘서 편하네요.

 

Header의 이름 즉, 각 필드의 이름을 원하는데로 가져오고 싶다면

쿼리문을 select ID as '아이디', ...(생략)... from STUDENT  이런식으로 수정하면 됩니다.

또는

dataGridView1 의 메서드를 사용하는 방법이 있습니다.

EX)  dataGridView1.Columns[0].HeaderText = "아이디";

      dataGridView1.Columns[1].HeaderText = "나이";

 

참고사이트 : https://afsdzvcx123.tistory.com/133