[C# 개발] MySQL DB 연동: 중복된 데이터인지 검사하는 프로그램 만들기 (WinForm)

2022. 11. 24. 01:13·■ Dev. Language/C#
반응형

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를 사용했으니, 동일한 환경에서 진행하고 싶은 사람들은 아래의 링크를 참고하도록 하자.

 

[MySQL] MySQL 샘플 데이터베이스, 공식 다운로드 및 적용하는 방법

0. 목적 MySQL 연습을 위해, MySQL 에서 공식적으로 제공하는 샘플 데이터베이스를 다운로드 받는 방법을 알아본다. 동시에, 내려받은 샘플 데이터베이스를 GUI 환경인 MySQL Workbench를 이용해 MySQL에

acredev.tistory.com


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에 입력된 정보들을 서로 대조해 기등록된 정보인지 여부를 정상적으로 파악하고 있는 모습을 확인할 수 있다.

 

이를 잘 활용하면, 회원가입의 아이디 중복 체크에 활용하는 등 무궁무진한 활용법이 존재할 것이다.

300x250
반응형
저작자표시 비영리 변경금지
'■ Dev. Language/C#' 카테고리의 다른 글
  • [Tip] C# MySQL, Visual Studio 사용 방법 및 연결 테스트 : NuGet Package를 통한 연동
  • [C# 개발] SMS 인증 번호를 발송해, 휴대폰 본인인증 확인하는 시스템 구현하기 (WinForm)
  • [C# 개발] 인증 번호를 발송해 이메일 본인인증 확인하는 시스템 구현하기
  • [C# 개발] MySQL DB 연동을 통해 간단한 로그인 및 회원가입 폼 만들기
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 연동: 중복된 데이터인지 검사하는 프로그램 만들기 (WinForm)
상단으로

티스토리툴바