티스토리 뷰

C#

12 WPF SQL 설정 및 디자인

김윤지. 2023. 5. 17. 16:03

<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=…

 

 

 

<DB 생성하기>

MySql Workbench에 접속해

Schema(DB)를 생성한다

eis를 생성하고 table을 다음과 같이 추가해준다

잘 추가된 모습을 볼 수 있다

데이터는 다음 절차에 따라 확인하면 된다

 

 

 

 

<WPF 디자인>

알고리즘을 참고하여 다음과 같이 디자인 한다 Horizontal 속성을 잘 활용하도록 한다

Grid
    StackPanel
        StackPanel
            Image (회사 이미지)
            TextBlock (ELS 제목)
            
        StackPanel
            StackPanel
                TextBlock (사번)
                TextBox
            StackPanel
                TextBlock (이름)
                TextBox
            StackPanel
                TextBlock (부서)
                ComboBox
            StackPanel
                TextBlock (직급)
                ComboBox
            StackPanel
                TextBlock (성별)
                RadioButton * 2
            StackPanel
                TextBlock (입사년월)
                DatePicker
            StackPanel
                TextBlock (퇴사년월)
                DatePicker
            StackPanel
                TextBlock (연락처)
                TextBox
            StackPanel
                TextBlock (기타)
                TextBox
            StackPanel
                Button (삽입)
                Button (업뎃)
            StackPanel
                Button (삭제)
                Button (로드)

        DataGrid

 

<xaml 코드>

<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>

ComboBox 하위 ComboBoxItem 요소들과 RadioBox 요소들을 넣어주어야 한다

 

<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();
        }
    }
}

 

직위, 부서, 성별, 입사일, 퇴사일을 저장하는 멤버변수(pos, dept, gender, dateEnter, dateExit) 선언

 

데이터베이스 연결을 위한 변수를 선언

connStr은 데이터베이스 연결 문자열을 저장하는 변수이고,

conn은 MySqlConnection 객체로 실제 데이터베이스 연결을 담당

connStr을 사용하여 MySqlConnection 객체를 생성하고 conn에 할당
DisplayDataGrid() 함수 (초기 데이터 그리드를 표시할 함수)


btnInsert_Click 이벤트 : "Insert" 버튼을 눌렀을 때 직원 정보를 입력받아 데이터베이스에 추가

성별을 체크박스로부터 확인해 gender 변수에 저장
입사일과 퇴사일을 선택한 경우 해당 값을 dateEnter와 dateExit 변수에 저장

else, DateTime.MaxValue 값을 dateExit에 저장
부서와 직위를 콤보박스로부터 선택하여 dept와 pos 변수에 저장
입력된 직원 정보를 MessageBox를 통해 확인

 

데이터베이스에 연결하고 SQL 쿼리를 실행하여 직원 정보를 추가

데이터베이스 연결을 닫고 입력 컨트롤을 초기화한 후 데이터 그리드를 다시 표시
InitControls 함수 : 입력 컨트롤을 초기화, 모든 텍스트 상자는 비워지고, 콤보박스는 선택되지 않은 상태로 초기화
btnLoadData_Click 이벤트 : "Load Data" 버튼이 클릭되었을 때 호출. 데이터 그리드를 다시 표시.

DisplayDataGrid 함수 : 데이터 그리드를 표시하는 역할
데이터베이스에 연결
SQL 쿼리를 실행하여 데이터 로드
MySqlDataAdapter를 사용해 데이터를 DataSet에 채우기
dataGrid에 DataSet의 첫 번째 테이블을 바인딩하여 데이터를 표시하고 DB 연결 닫기

'C#' 카테고리의 다른 글

14 WPF SQL 완성, 스네이크 게임  (0) 2023.05.31
13 WPF SQL 기능  (0) 2023.05.24
11 SQL 설치  (0) 2023.05.17
10 WPF  (0) 2023.05.11
9 WPF  (0) 2023.04.27
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함