카테고리 없음

11주차 MySQL 및 직원 정보 시스템

이승형 2023. 6. 10. 22:49

MySQL 설치 방법 

https://hongong.hanbit.co.kr/mysql-%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C-%EB%B0%8F-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0mysql-community-8-0/

 

MySQL 다운로드 및 설치하기(MySQL Community 8.0)

SQL을 본격적으로 사용하려면 DBMS를 설치해야 합니다. 여러 가지 DBMS 중에서 MySQL 설치 하는 방법을 알아보고, 정상적으로 설치가 되었는지 확인하는 방법을 알아보겠습니다. 2021년 10월 기준 MySQL

hongong.hanbit.co.kr

 

링크로 들어가 절차대로 다운로드를 시작한다 

절차대로 시행 후 다운로드 및 설치를 완료한다.

 

 

 

DB프로그래밍의 순서

데이터베이스(Database) : MySql
데이터공급자(Data Provider) : MySqlClient
string connStr = “…”;  // DB 연결 문자열
string sql = “…”;  // SQL 명령어 문자열
MySqlConnection conn = new MySqlConnection(connStr);
MySqlCommand cmd = new MySqlCommand(sql, conn);
MySqlDataAdapter da = new MySqlDataAdapter(sql, conn);

 

SQL

SELECT * FROM 테이블이름
SELECT * FROM 테이블이름 WHERE Id=…
UPDATE 테이블이름 SET ID=…, SId=…, SName=…, Phone=…
WHERE
Id=…
이때 숫자는 따옴표 없이,
문자열은 문자열처럼 작은 따옴표를 넣어주어야 한다
INSERT INTO 테이블이름 VALUES ( … , … , … , …)
DELETE FROM 테이블이름 WHERE Id=…

 

미리 알아 두면 이번 프로그래밍에 도움이 된다.
 
디자인 코드 
<Window x:Class="_009_EIS.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:_009_EIS"
        mc:Ignorable="d"
        Title="EIS" Height="530" Width="900">
    <Grid Background="AliceBlue">
        <StackPanel Margin="20">
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                <Image Width="40" Height="40" Source="/Images/파인애플.png"/>
                <TextBlock Text="Employee Information System 1.0"
                           FontSize="20" FontWeight="Bold" FontStyle="Italic"
                           Padding="10,10,10,20"/>
            </StackPanel>
            <StackPanel Orientation="Horizontal">
                <StackPanel Width="280">
                    <StackPanel Orientation="Horizontal" Margin="5">
                        <TextBlock Width="80" Text="사번 : "/>
                        <TextBox x:Name="txtEid" Width="150"/>
                    </StackPanel>
                    <StackPanel Orientation="Horizontal" Margin="5">
                        <TextBlock Width="80" Text="이름 : "/>
                        <TextBox x:Name="txtName" Width="150"/>
                    </StackPanel>
                    <StackPanel Orientation="Horizontal" Margin="5">
                        <TextBlock Width="80" Text="부서 : "/>
                        <ComboBox x:Name="cbDept" Width="150">
                            <ComboBoxItem>개발팀</ComboBoxItem>
                            <ComboBoxItem>마케팅팀</ComboBoxItem>
                            <ComboBoxItem>기획팀</ComboBoxItem>
                            <ComboBoxItem>총무팀</ComboBoxItem>
                            <ComboBoxItem>해외사업팀</ComboBoxItem>
                        </ComboBox>
                    </StackPanel>
                    <StackPanel Orientation="Horizontal" Margin="5">
                        <TextBlock Width="80" Text="직급 : "/>
                        <ComboBox x:Name="cbPos" Width="150">
                            <ComboBoxItem>이사</ComboBoxItem>
                            <ComboBoxItem>부장</ComboBoxItem>
                            <ComboBoxItem>과장</ComboBoxItem>
                            <ComboBoxItem>팀장</ComboBoxItem>
                            <ComboBoxItem>대리</ComboBoxItem>
                            <ComboBoxItem>사원</ComboBoxItem>
                        </ComboBox>
                    </StackPanel>
                    <StackPanel Orientation="Horizontal" Margin="5">
                        <TextBlock Width="80" Text="성별 : "/>
                        <RadioButton x:Name="rbMale" Content="남" Width="75"/>
                        <RadioButton x:Name="rbFemale" Content="여" Width="75"/>
                    </StackPanel>
                    <StackPanel Orientation="Horizontal" Margin="5">
                        <TextBlock Width="80" Text="입사년월 : "/>
                        <DatePicker x:Name="dpEnter" Width="150"/>
                    </StackPanel>
                    <StackPanel Orientation="Horizontal" Margin="5">
                        <TextBlock Width="80" Text="퇴사년월 : "/>
                        <DatePicker x:Name="dpExit" Width="150"/>
                    </StackPanel>
                    <StackPanel Orientation="Horizontal" Margin="5">
                        <TextBlock Width="80" Text="연락처 : "/>
                        <TextBox x:Name="txtContact" Width="150"/>
                    </StackPanel>
                    <StackPanel Orientation="Horizontal" Margin="5">
                        <TextBlock Width="80" Text="기타 : "/>
                        <TextBox x:Name="txtComment" Width="150" Height="80"/>
                    </StackPanel>
                    <StackPanel Orientation="Horizontal" Margin="5">
                        <Button x:Name="btnInsert" Width="100" Content="Insert" Margin="0 0 20 0" Click="btnInsert_Click"/>
                        <Button x:Name="btnUpdate" Width="100" Content="Update" Margin="0 0 20 0"/>
                    </StackPanel>
                    <StackPanel Orientation="Horizontal" Margin="5">
                        <Button x:Name="btnDelete" Width="100" Content="Delete" Margin="0 0 20 0"/>
                        <Button x:Name="btnLoadData" Width="100" Content="Load Data" Margin="0 0 20 0" Click="btnLoadData_Click"/>
                    </StackPanel>
                </StackPanel>
                <DataGrid x:Name="dataGrid" Width="540">
                </DataGrid>
            </StackPanel>
        </StackPanel>
    </Grid>
</Window>
 

CS코드 

using System;
using System.Collections.Generic;
using System.Data;      //추가
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using MySql.Data.MySqlClient;   //Nuget에서 설치한 패키지

namespace _009_EIS
{
    public partial class MainWindow : Window
    {
        //멤버변수 디폴트가 private (private string pos...)
        string pos = "";
        string dept = "";
        string gender = "";
        string dateEnter = "";
        string dateExit = "";

        string connStr = "server=localhost; user id=root; password=0000; database=eis_db;";     //db 연결 문자열
        MySqlConnection conn = null;    //db 연결을 위해 선언

        public MainWindow()
        {
            InitializeComponent();

            conn = new MySqlConnection(connStr);
            DisplayDataGrid();
            //MessageBox.Show("conn 설정!");
        }

        private void btnInsert_Click(object sender, RoutedEventArgs e)
        {
            if (rbMale.IsChecked == true)
                gender = "남성";
            else if (rbFemale.IsChecked == true)
                gender = "여성";

            if (dpEnter.SelectedDate != null)
                dateEnter = dpEnter.SelectedDate.Value.Date.ToShortDateString();
            if (dpExit.SelectedDate != null)
                dateExit = dpExit.SelectedDate.Value.Date.ToShortDateString();
            else
                dateExit = DateTime.MaxValue.ToString();


            dept = cbDept.Text;
            pos = cbPos.Text;
            
            MessageBox.Show(dept + " " + pos + " " + gender + " " + dateEnter + " " + dateExit);
            conn.Open();

            string sql = string.Format(
                "INSERT INTO eis_table (name, department, position," +
                "gender, date_enter, date_exit, contact, comment)" +
                "VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}')",
                txtName.Text, dept, pos, gender,
                dateEnter, dateExit, txtContact.Text, txtComment.Text);
            
            MySqlCommand cmd = new MySqlCommand(sql, conn);
            if (cmd.ExecuteNonQuery() == 1)
                MessageBox.Show("Inserted Successfully");

            conn.Close();
            InitControls();
            DisplayDataGrid();
        }

        private void InitControls()
        {
            txtEid.Text = "";
            txtName.Text = "";
            txtContact.Text = "";
            txtComment.Text = "";

            cbDept.SelectedIndex = -1;
            cbPos.SelectedIndex = -1;

            rbMale.IsChecked = false;
            rbFemale.IsChecked = false;

            dpEnter.Text = "";
            dpExit.Text = "";
        }

        private void btnLoadData_Click(object sender, RoutedEventArgs e)
        {
            DisplayDataGrid();
        }

        private void DisplayDataGrid()
        {
            conn.Open();

            string sql = "SELECT * FROM eis_table";

            MySqlDataAdapter da = new MySqlDataAdapter(sql, conn);
            DataSet ds = new DataSet();
            da.Fill(ds);
            dataGrid.ItemsSource = ds.Tables[0].DefaultView;

            conn.Close();
        }
    }
}

 

connStr: MySQL 데이터베이스에 연결하기 위한 연결 문자열을 저장합니다. 데이터베이스의 서버 주소, 사용자 이름, 비밀번호, 데이터베이스 이름 등이 포함됩니다.

 

conn: MySQL 데이터베이스 연결을 위한 MySqlConnection 객체가 선언됩니다. 이 객체를 사용하여 데이터베이스에 연결하고 쿼리를 실행할 수 있습니다.

 

생성자: MainWindow 클래스의 생성자가 정의되어 있습니다. InitializeComponent 메서드를 호출하여 UI 요소를 초기화하고, 데이터 그리드를 표시할 준비를 합니다.

 

btnInsert_Click 메서드: "Insert" 버튼의 클릭 이벤트 핸들러입니다. 사용자가 입력한 데이터를 가져와서 데이터베이스에 삽입하는 작업을 수행합니다. 입력된 값을 변수에 저장하고, SQL 문을 생성하여 데이터베이스에 삽입합니다. 삽입이 성공하면 메시지를 표시하고, 컨트롤들을 초기화하고 데이터 그리드를 업데이트합니다.

 

InitControls 메서드: 입력 컨트롤들을 초기화하는 메서드입니다. 텍스트 상자를 비우고, 콤보 상자와 라디오 버튼의 선택 상태를 초기화합니다.

 

btnLoadData_Click 메서드: "Load Data" 버튼의 클릭 이벤트 핸들러입니다. 데이터 그리드를 다시 표시하는 작업을 수행합니다. 데이터베이스에서 데이터를 가져와서 데이터 그리드에 바인딩합니다.

 

결과창