● 개발목적
윈도우 폼을 제작하여 C#. NET 언어와 MySQL 데이터베이스를 연동해, 사용자의 회원가입 정보를 MySQL 데이터베이스에 저장하고 로그인을 할 때 이를 검증할 수 있도록 하는 간단한 프로그램을 제작한다.
● 참고
MySQL에서의 데이터베이스 스키마 / 테이블 생성 또는, 데이터 타입과 열 플래그 (제약 조건)이 궁금한 사람들이라면 아래의 링크를 참고해 조치하면 된다.
● 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
버튼을 더블 클릭 해, 회원가입 버튼을 눌렀을 시 수행할 동작을 지정하는 코드를 작성한다. 이 또한 모든 관련 설명을 주석으로 상세히 달아두었으니, 참고해서 학습하면 좋을 것 같다.
● 전체 코드 다운로드
해당 프로젝트 코드를 전부 첨부하니, 다운로드하여 참고해도 좋을 것 같다. 주석은 달려있지 않다.
● 결과
회원가입을 통한 값 전송 시 정상적으로 MySQL 테이블에 삽입되고, 그 데이터를 토대로 로그인이 되는 모습을 확인할 수 있다.