[C# 개발] MySQL DB 연동을 통해 간단한 로그인 및 회원가입 폼 만들기

2022. 10. 11. 01:53·■ Dev. Language/C#
반응형

●  개발목적

윈도우 폼을 제작하여 C#. NET 언어와 MySQL 데이터베이스를 연동해, 사용자의 회원가입 정보를 MySQL 데이터베이스에 저장하고 로그인을 할 때 이를 검증할 수 있도록 하는 간단한 프로그램을 제작한다.

 


●  참고

MySQL에서의 데이터베이스 스키마 / 테이블 생성 또는, 데이터 타입과 열 플래그 (제약 조건)이 궁금한 사람들이라면 아래의 링크를 참고해 조치하면 된다.

 

[MySQL] 간단한 테이블 생성과 데이터 타입, 열 플래그 (제약조건) 종류 살펴보기

● 개발목적 MySQL을 통해 간단한 테이블과 데이터값을 생성하고, 이 때 사용되는 열 플래그 (제약조건) 종류들과 그 사용방법에 대해 알아본다. ● 참고 MySQL에서의 테이블 생성 시에는 명령어를

acredev.tistory.com

 


●  MySQL 스키마, 테이블 작성

dbtest 스키마에 account_info 테이블을 작성했다. 간단한 회원가입 폼을 제작하기 위함으로, name, id, pwd 값만 받기 위해 세 개의 칼럼만 추가했다.

 


●  윈도우 폼 제작

Form1은 위와 같이 디자인을 진행한다.

 

요소 종류 속성
① Label ㆍ모양 → Text : 아이디
② Label ㆍ모양 → Text : 비밀번호
③ TextBox ㆍ디자인 → Name : txtbox_id
④ TextBox ㆍ디자인 → Name : txtbox_pwd
⑤ Button ㆍ디자인 → Name : btn_login
⑥ Button ㆍ디자인 → Name : btn_newmember

 

 

 

Form2를 추가로 하나 생성해서, 위와 같이 디자인을 진행한다.

 

요소 종류 속성
① Label ㆍ모양 → Text : 회원가입
② Label ㆍ모양 → Text : 이름
③ Label ㆍ모양 → Text : 아이디
④ Label ㆍ모양 → Text : 비밀번호
⑤ TextBox ㆍ디자인 → Name : txtbox_name
⑥ TextBox ㆍ디자인 → Name : txtbox_id
⑦ TextBox ㆍ디자인 → Name : txtbox_pwd
⑧ Button ㆍ디자인 → Name : btn_newmember

 

 


●  MySQL DB 참조 추가

솔루션 탐색기의 참조 항목을 우측 클릭하고, 참조 추가 버튼을 클릭한다.

 

 

 

좌측 트리 메뉴에서 확장 버튼을 클릭하고, 스크롤을 내려 MySql.Data 항목을 체크 후 확인 버튼을 눌러 참조를 추가한다.

 


●  Form1.cs 코드작성

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 MySql.Data.MySqlClient; // SQL 연동을 위한 using

코드 작성 블럭으로 진입해, 코드 최상단에 MySql.Data.MySqlClient를 using 한다. SQL과의 연동을 필요한 라이브러리이기 때문에 필수적으로 using 해주면 된다.

 

 

 

private void btn_login_Click(object sender, EventArgs e)
    {
        try
        {
            MySqlConnection connection = new MySqlConnection("Server = localhost;Database=dbtest;Uid=root;Pwd=root;");
            // SQL 서버와 연결.
            // Server = localhost : 로컬 호스트 (내 컴퓨터) 서버와 연결
            // Database = 스키마 이름
            // Uid = DB 로그인 아이디
            // Pwd = DB 로그인 비밀번호
            
            connection.Open();
            // SQL 서버 연결

            int login_status = 0;
            // 로그인 상태 변수 선언, 비로그인 상태는 0

            string loginid = txtbox_id.Text;
            // 문자열 loginid 변수는 txtbox_id 의 텍스트값
            string loginpwd = txtbox_pwd.Text;
            // 문자열 loginpwd 변수는 txtbox_pwd 의 텍스트값

            string selectQuery = "SELECT * FROM account_info WHERE id = \'" + loginid + "\' ";
            // 문자열 selectQuery 변수 선언.
            // MySQL에 전송할 명령어를 입력한다.
            // 실제로 MySQL에 전송될 명령어는 "" 사이의 값.
            // dbtest 스키마의 account_info 테이블 값을 읽기 위해 변수 선언.
            
            MySqlCommand Selectcommand = new MySqlCommand(selectQuery, connection);
            // MySqlCommand는 MySQL로 명령어를 전송하기 위한 클래스.
            // MySQL에 selectQuery 값을 보내고, connection 값을 보내 연결을 시도한다.
            // 위 정보를 Selectcommand 변수에 저장한다.

            MySqlDataReader userAccount = Selectcommand.ExecuteReader();
            // MySqlDataReader은 입력값을 받기 위함.
            // Selectcommand 변수에 ExecuteReader() 객체를 통해 입력값을 받고,
            // 해당 정보를 userAccount 변수에 저장한다.

            while (userAccount.Read())
            // userAccount가 Read 되고 있을 동안
            {
                if (loginid == (string)userAccount["id"] && loginpwd == (string)userAccount["pwd"])
                // 만약 loginid변수의 값이 account_info 테이블 값의 id 정보와,
                // loginpwd변수의 값이 account_info 테이블 값의 pwd 정보와 일치한다면
                {
                    login_status = 1;
                    // 해당 변수 상태를 1로 바꾼다.
                }
            }
            connection.Close();
            // MySQL과 연결을 끊는다.

            if (login_status == 1)
            // 만약 해당 변수 상태가 1이라면,
            {
                MessageBox.Show("로그인 완료");
                // 로그인 완료 메시지박스를 띄운다.
            }
            else
           	// 아니라면,
            {
                MessageBox.Show("회원 정보를 확인해 주세요.");
                // 오류 메시지박스를 띄운다.
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            // 예외값 발생 시 해당 정보와 관련된 메시지박스를 띄운다.
        }
    }

btn_login 버튼을 더블 클릭 해, 로그인 버튼을 눌렀을 시 수행할 동작을 지정하는 코드를 작성한다. 전체 코드블럭을 첨부하고, 모든 명령어의 설명을 주석으로 달아놓으니 참고해서 학습하면 좋을 것 같다.

 

 

 

private void btn_newmember_Click(object sender, EventArgs e)
    {
        Form2 showform2 = new Form2();
        showform2.ShowDialog();
    }

btn_newmember 버튼을 더블 클릭 해, 회원가입 버튼을 눌렀을 시 Form2 폼을 띄우기 위한 코드를 작성한다.

 


●  Form2.cs 코드작성

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 MySql.Data.MySqlClient; // SQL 연동을 위한 using

Form1.cs와 마찬가지로, 코드 최상단에 MySql.Data.MySqlClient를 using 한다.

 

 

 

private void btn_newmember_Click(object sender, EventArgs e)
    {
        try
        {
            MySqlConnection connection = new MySqlConnection("Server = localhost;Database=dbtest;Uid=root;Pwd=root;");
            // SQL 서버와 연결.
            // Server = localhost : 로컬 호스트 (내 컴퓨터) 서버와 연결
            // Database = 스키마 이름
            // Uid = DB 로그인 아이디
            // Pwd = DB 로그인 비밀번호
            
            connection.Open();
            // SQL 서버 연결

            string insertQuery = "INSERT INTO account_info (name, id, pwd) VALUES ('" + txtbox_name.Text + "', '" + txtbox_id.Text + "', '" + txtbox_pwd.Text + "');";
            // 문자열 insertQuery 변수 선언.
            // MySQL에 전송할 명령어를 입력한다.
            // 실제로 MySQL에 전송될 명령어는 "" 사이의 값.
            // dbtest 스키마의 account_info 테이블에 값을 추가하기 위한 변수.
            
            MySqlCommand command = new MySqlCommand(insertQuery, connection);
            // MySqlCommand는 MySQL로 명령어를 전송하기 위한 클래스.
            // MySQL에 insertQuery 값을 보내고, connection 값을 보내 연결을 시도한다.
            // 위 정보를 command 변수에 저장한다.

            if (command.ExecuteNonQuery() == 1)
            {
                MessageBox.Show(txtbox_name.Text + "님 회원가입 완료, 사용할 아이디는 " + txtbox_id.Text + "입니다.");
                // 정상 회원가입 안내 메시지박스를 띄운다.
                connection.Close();
                // SQL 연결을 끊는다.
                Close();
                // Form2를 닫는다. (Form1의 로그인 창으로 돌아가기 위함)
            }
            else
            // 아니라면,
            {
                MessageBox.Show("비정상 입력 정보, 재확인 요망");
                // 오류 메시지박스를 띄운다.
            }
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
            // 예외값 발생 시 해당 정보와 관련된 메시지박스를 띄운다.
        }
    }

btn_newmember 버튼을 더블 클릭 해, 회원가입 버튼을 눌렀을 시 수행할 동작을 지정하는 코드를 작성한다. 이 또한 모든 관련 설명을 주석으로 상세히 달아두었으니, 참고해서 학습하면 좋을 것 같다.

 


●  전체 코드 다운로드

Form1_Code.txt
0.00MB
Form2_Code.txt
0.00MB

해당 프로젝트 코드를 전부 첨부하니, 다운로드하여 참고해도 좋을 것 같다. 주석은 달려있지 않다.

 


●  결과

회원가입을 통한 값 전송 시 정상적으로 MySQL 테이블에 삽입되고, 그 데이터를 토대로 로그인이 되는 모습을 확인할 수 있다.

300x250
반응형
저작자표시 비영리 변경금지 (새창열림)
'■ Dev. Language/C#' 카테고리의 다른 글
  • [Tip] C# MySQL, Visual Studio 사용 방법 및 연결 테스트 : NuGet Package를 통한 연동
  • [C# 개발] SMS 인증 번호를 발송해, 휴대폰 본인인증 확인하는 시스템 구현하기 (WinForm)
  • [C# 개발] 인증 번호를 발송해 이메일 본인인증 확인하는 시스템 구현하기
  • [C# 개발] 구글 SMTP 서버를 사용해 이메일 발송하기 (Using Google SMTP)
Min Hyuk-Lee
Min Hyuk-Lee
시스템 엔지니어로 근무하고 있습니다.
  • Min Hyuk-Lee
    아크레의 개발로그
    Min Hyuk-Lee
    m_file@naver.com
  • 전체
    오늘
    어제
    • 📝 Log. (81)
      • ■ Dev. Language (11)
        • C (5)
        • C# (6)
      • ■ Dev. ETC (8)
        • Unity 3D (3)
        • Android Studio (JAVA) (5)
      • ■ Web (6)
        • HTML (3)
        • JSP (3)
      • ■ Linux (8)
        • Shell (2)
        • Linux Tip. (6)
        • 보안취약점 진단 (0)
      • ■ Windows (4)
        • Server (1)
        • Windows Tip. (3)
      • ■ VM (1)
        • VMWare (1)
        • Virtual Box (0)
      • ■ Database (9)
        • MySQL (7)
        • OracleDB (2)
      • ■ DevKit (5)
        • IDE (4)
        • Tool (1)
      • ■ Error (17)
        • Linux 오류해결 (4)
        • DB 오류해결 (3)
        • IDE 오류해결 (2)
        • VM 오류해결 (3)
        • Unity 오류해결 (4)
        • SSH, SFTP 오류해결 (1)
      • ■ Photoshop (3)
        • 디자인&이미지 창작 (3)
      • ■ Document (3)
        • MS Word (2)
        • PDF (1)
      • ■ Study (4)
        • Baekjoon (4)
      • ■ 작문 (1)
        • 회고 (1)
      • ■ ETC (1)
        • Car (0)
        • etc (1)
  • 🌐 Menu

    • 📓 Guestbook
  • 🔗 Other Links

    • GitHub
    • 아크레의 IT ISSUE
  • 📢 Notice

    • [스킨 업데이트] hELLO v4.10.0 적용완료
    • [스킨 업데이트] hELLO v4.9.0 적용 완료
    • [스킨 업데이트] hELLO v4.8.1 적용 완료
  • 💬 Recent Comments

  • hELLO· Designed By정상우.v4.10.0
Min Hyuk-Lee
[C# 개발] MySQL DB 연동을 통해 간단한 로그인 및 회원가입 폼 만들기
상단으로

티스토리툴바