0. 목적
C# 언어로 작성된 윈도우 폼을 제작해, 사용자가 찾는 정보가 MySQL DB에 기등록된 World Name 정보인지 여부를 판단하는 간단한 프로그램을 만든다. 기등록된 정보일 경우 중복검사
버튼을 클릭했을 때, 기등록된 정보입니다.
라는 MessageBox
를 띄운다. 반대로, 등록되지 않은 정보일 경우 중복검사
버튼을 클릭했을 때 등록되지 않은 정보입니다.
라는MessageBox
를 띄우도록 한다.
▣ 상세한 프로그램 실행구조
① 사용자가 txtbox_name
텍스트박스에 검색하고자 하는 나라명을 입력한다.
② 사용자가 해당 나라명이 MySQL 데이터베이스의 world
스키마 city
테이블의 Name
칼럼값에 기등록된 정보인지, 미등록된 정보인지 판별하기 위해 btn_check
(중복검사) 버튼을 누른다.
③ txtbox_name
의 텍스트값과 동일한 값이, Name
칼럼에 있다면 MessageBox.Show("기등록된 정보입니다.");
명령을 수행한다.
④ txtbox_name
의 텍스트값과 동일한 값이, Name
칼럼에 없다면 MessageBox.Show("등록되지 않은 정보입니다.");
명령을 수행한다.
1. 참고
본 포스트에서는 Windows 10 Pro 운영체제를 구동하는 컴퓨터에서 Visual Studio 2022 IDE를 사용했으며, MySQL Workbench 8.0.31 환경에서 진행되었다. 또한, 본 포스트에서 사용된 예제 SCHEMAS
는 MySQL에서 기본 제공되는 world
SCHEMAS
를 사용했으니, 동일한 환경에서 진행하고 싶은 사람들은 아래의 링크를 참고하도록 하자.
2. 윈도우 폼 디자인
Visual Studio C# WinForm 프로젝트를 하나 생성하고, 위와 같이 Form1.cs
에 디자인을 진행한다.
요소 | 종류 | 속성 |
① | Label | ㆍ모양 → Text : World Name |
② | TextBox | ㆍ디자인 → Name : txtbox_name |
③ | Button | ㆍ디자인 → Name : btn_check ㆍ모양 → Name : 중복검사 |
3. 코드 작성
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; // MySQL 사용을 위한 참조문
코드 작성 블럭으로 진입해, 최상단에 MySQL 사용을 위한MySql.Data.MySqlClient;
참조문을 using
한다.
// btn_check 버튼 클릭 시
private void btn_check_Click(object sender, EventArgs e)
{
// MySQL 연결을 위한 connection 객체 생성
// MySqlConnection 클래스 괄호 안의 내용은, 본인의 MySQL 서버 상황에 맞는 값을 삽입 요망
MySqlConnection connection = new MySqlConnection("Server=localhost;Database=world;Uid=root;Pwd=root;");
// 앞서 생성한 connection 객체를 통해 MySQL 서버 연결 유지
connection.Open();
// MySQL로 보낼 쿼리문인 문자열 Query 변수 선언
// city 테이블에 txtbox_name 이름으로 검색했을 때, 나오는 결과값 개수를 cnt 변수로 세도록 한다.
string Query = "SELECT *, COUNT(*) as cnt FROM world.city WHERE Name='" + txtbox_name.Text + "';";
// MySQL로 쿼리문을 보내기 위해 command 객체 생성 후 쿼리문 전달
MySqlCommand command = new MySqlCommand(Query, connection);
// 받아온 결과값을 reader 객체에 저장
MySqlDataReader reader = command.ExecuteReader();
try
{
while(reader.Read())
{
// 받아온 reader 객체의 값 중, cnt 칼럼의 값이 0이 아니라면
// -> cnt 칼럼의 값이 0이 아니란 의미는?
// ---> txtbox_name에 입력된 텍스트값이 이미 city 테이블에 기등록되어 있다는 뜻
if (reader["cnt"].ToString() != "0")
{
// 기등록된 정보입니다. 메시지 박스 출력
MessageBox.Show("기등록된 정보입니다.");
}
// 받아온 reader 객체의 값 중, cnt 칼럼의 값이 0이 맞다면
// -> cnt 칼럼의 값이 0이란 의미는?
// ---> txtbox_name에 입력된 텍스트값이 city 테이블에 미등록되어 있다는 뜻
else
{
// 등록되지 않은 정보입니다. 메시지 박스 출력
MessageBox.Show("등록되지 않은 정보입니다.");
}
}
}
catch (Exception ex)
{
// 오류 발생 시 오류로그 출력
MessageBox.Show("오류로그 : " + ex.Message.ToString());
}
// MySQL 서버 연결 종료
connection.Close();
}
btn_check
버튼을 더블 클릭 해, 사용자가 중복검사 버튼 클릭 시 수행할 명령 코드를 입력한다.
MySQL에 SELECT *, COUNT(*) as cnt FROM world.city WHERE='txtbox_name 텍스트값';
쿼리문을 보내, txtbox_name
에 입력된 텍스트값이 이미 MySQL 데이터베이스 world
스키마 city
테이블 Name
칼럼에 기등록된 정보인지 확인해 본다.
기등록 되어 있는 정보라면 cnt
칼럼의 값이 0
이 아닐 것이고, 미등록 되어 있다면 cnt
칼럼의 값이 0
일 것이다. 따라서, 위와 같이 if
조건식을 활용해 코드를 구성했다.
▣ 전체 코드
전체 코드가 필요한 사람들을 위해 첨부한다. 주석 처리는 따로 되어있지 않다.
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;
namespace AccountWithMySQLDB_Advanced
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btn_check_Click(object sender, EventArgs e)
{
MySqlConnection connection = new MySqlConnection("Server=localhost;Database=world;Uid=root;Pwd=root;");
connection.Open();
string Query = "SELECT *, COUNT(*) as cnt FROM world.city WHERE Name='" + txtbox_name.Text + "';";
MySqlCommand command = new MySqlCommand(Query, connection);
MySqlDataReader reader = command.ExecuteReader();
try
{
while (reader.Read())
{
if (reader["cnt"].ToString() != "0")
{
MessageBox.Show("기등록된 정보입니다.");
}
else
{
MessageBox.Show("등록되지 않은 정보입니다.");
}
}
}
catch (Exception ex)
{
MessageBox.Show("오류로그 : " + ex.Message.ToString());
}
connection.Close();
}
}
}
4. 실행결과
MySQL world
스키마 city
테이블의 Name
칼럼과,txtbox_name
에 입력된 정보들을 서로 대조해 기등록된 정보인지 여부를 정상적으로 파악하고 있는 모습을 확인할 수 있다.
이를 잘 활용하면, 회원가입의 아이디 중복 체크에 활용하는 등 무궁무진한 활용법이 존재할 것이다.