-
# 15주차 My SQL비주얼 프로그래밍 2024. 6. 17. 00:18
오늘은 My SQL에 데이터를 입력, 수정, 삭제 프로젝트를 진행하겠다.
먼저 프로젝트를 진행하기 C# 프로그램과 MySQL 을 연결하고 작업하기 위해 프로그램을 언어를 알아보겠다.
더보기(1) string connStr을 설정한다.
string connStr= "server=localhost; user id=root; password=1234; database=eis_db";
(2) MySqlConnection 객체 conn을 생성하고 연다.(이때 connStr을 사용한다)
MySqlConnection conn = new MySqlConnection(connStr);
conn.Open();
(3) 데이터베이스 명령어를 SQL 문장으로 만들어 string 변수에 저장한다.
string sql= "SELECT * FROM eis_table";
string sql= string.Format("INSERT INTO eis_table ...", ...);
string sql= string.Format("DELETE FROM eis_table WHERE eid={0}", txtEid.Text);
string sql= string.Format("UPDATE eis_table SET name='{0}', department='{1}',...);
(4) DB에서 수행하는 작업에 따라 두 가지 방법으로 명령어를 처리한다.(이때 conn과 sql을 사용한다)
① DB에서 데이터를 읽어올 경우에는 MySqlDataAdapter를 사용한다. MySqlDataAdapter da = new MySqlDataAdapter(sql, conn);
DataSet ds = new DataSet();
da.Fill(ds);
dataGrid.ItemsSource= ds.Tables[0].DefaultView;
② 추가, 삭제, 수정의 작업에는 MySqlCommand를 사용한다.
MySqlCommand cmd= new MySqlCommand(sql, conn);
if(cmd.ExecuteNonQuery() == 1)
MessageBox.Show("Inserted successfully!");
(5) connection을 닫는다.
conn.Close();
그럼 프로젝트를 본격적으로 시작해 보겠다.
먼저 MY SQL홈페이지로 들어간다 MY SQL 홈페이지에 DOWNLOADS를 클릭하고 뜨는 목록 중에 MYSQL Community, Server, MYSQL Workbench를 찾아 다운로드 한다 설치가 완료된 MYSQL Workbench를 열면 가장 메인 화면에 MYSQL Connections를 보면 프로젝트가 있다 그 프로젝트를 클릭하면
이런 화면이 보일 것이다
schma( Database )를 생성 할 것이다.
1. Create Schema를 우클릭 후
2. eis_db<데이터베이스의 이름>을 입력한다.
3. Apply를 클릭 한다.
그럼 이제 직원정보시스템 을 만들어 보겠다.
Table: 개수와 상관없이 여러 개 만들 수 있다.
9개의 column을 만들어준다.
Title="EIS" Height="530" Width="850" Background="AliceBlue"> <StackPanel Margin="20"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Center"> <Image Source="Images/myimg.png" Width="48" Height="32"></Image> <TextBlock FontSize="30" Margin="20 0 0 0">Employee Information System 1.0</TextBlock> </StackPanel> <StackPanel Orientation="Horizontal"> <StackPanel> <StackPanel Orientation="Horizontal" Margin="5"> <TextBlock Width="80">사번:</TextBlock> <TextBox x:Name="txtEid" Width="150"></TextBox> </StackPanel> <StackPanel Orientation="Horizontal" Margin="5"> <TextBlock Width="80">이름:</TextBlock> <TextBox x:Name="txtName" Width="150"></TextBox> </StackPanel> <StackPanel Orientation="Horizontal" Margin="5"> <TextBlock Width="80">부서:</TextBlock> <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">직급:</TextBlock> <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">성별:</TextBlock> <RadioButton x:Name="rbmale" Width="50">남</RadioButton> <RadioButton x:Name="rbFemale" Width="50">여</RadioButton> </StackPanel> <StackPanel Orientation="Horizontal" Margin="5"> <TextBlock Width="80">입사일:</TextBlock> <DatePicker x:Name="dpEnter" Width="150"></DatePicker> </StackPanel> <StackPanel Orientation="Horizontal" Margin="5"> <TextBlock Width="80">퇴사일:</TextBlock> <DatePicker x:Name="dpExit" Width="150"></DatePicker> </StackPanel> <StackPanel Orientation="Horizontal" Margin="5"> <TextBlock Width="80">연락처:</TextBlock> <TextBox x:Name="txtContact" Width="150"></TextBox> </StackPanel> <StackPanel Orientation="Horizontal" Margin="5"> <TextBlock Width="80">기타:</TextBlock> <TextBox x:Name="txtComment" Width="150" Height="80" AcceptsReturn="True" AcceptsTab="True" TextWrapping="Wrap" VerticalScrollBarVisibility="Auto"/> </StackPanel> <StackPanel Orientation="Horizontal" Margin="5" HorizontalAlignment="Center"> <Button x:Name="btnInsert" Content="Insert" Width="100" Click="btnInsert_Click"/> <TextBlock Width="20"/> <Button x:Name="btnUpdate" Content="Update" Width="100" Click="btnUpdate_Click"/> </StackPanel> <StackPanel Orientation="Horizontal" Margin="5" HorizontalAlignment="Center"> <Button x:Name="btnDelete" Content="Delete" Width="100" Click="btnDelete_Click"/> <TextBlock Width="20"/> <Button x:Name="btnLoadData" Content="Load Data" Width="100" Click="btnLoadData_Click"/> </StackPanel> </StackPanel> <DataGrid Margin="5" Width="540"></DataGrid> </StackPanel> </StackPanel> </Window>
이런 화면으로 디자인이 된다.
* 에러가 나기 쉬운 부분은 Try, Catch로 묶어 준다
# MainWindow 클래스의 Field 선언
using MySql.Data.MySqlClient;
public partial class MainWindow : Window { private string pos = ""; //positon(직급) private string dept = ""; //부서 private string gender = ""; //성별 private string dateEnter = ""; //입사일 private string dateExit = ""; //퇴사일 private string connStr = "server=localhost; user id=root; password=****;database=****"; private MySqlConnection conn; public MainWindow() { InitializeComponent(); conn = new MySqlConnection(connStr); DisplayDataGrid(); }
pos(직급), dept(부서), gender(성별), dateEnter(입사), date(퇴사) → 선언
→ db연결을 위해 본인의 conn을 함께 작성해줍니다.
# InitControls : 컨트롤들을 초기화시켜줍니다.
private void InitControls() { txtEid.Text = ""; txtName.Text = ""; txtContact.Text = ""; txtComment.Text = ""; cbDept.SelectedIndex = -1; // -1은 선택된 것이 없다는 뜻 cbPos.SelectedIndex = -1; // -1은 선택된 것이 없다는 뜻 rbMale.IsChecked = false; rbMale.IsChecked = false; dpEnter.Text = ""; dpExit.Text = ""; }
# DataGrid에서 셀선택
private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) { DataGrid dg = (DataGrid)sender; DataRowView rowView = dg.SelectedItem as DataRowView; if (rowView == null) { return; } txtEid.Text = rowView.Row[0].ToString(); txtName.Text = rowView.Row[1].ToString(); cbDept.Text = rowView.Row[2].ToString(); cbPos.Text = rowView.Row[3].ToString(); if (rowView.Row[4].ToString() == "남성") { rbMale.IsChecked = true; rbFemale.IsChecked = false; } else { rbMale.IsChecked = false; rbFemale.IsChecked = true; } dpEnter.Text = rowView.Row[5].ToString(); dpExit.Text = rowView.Row[6].ToString(); txtContact.Text = rowView.Row[7].ToString(); txtComment.Text = rowView.Row[8].ToString(); }
# Load Data – DB에 저장된 내용을 DataGrid에 표시
private void DisplayDataGrid() { conn.Open(); string sql = "SELECT * FROM eis_table"; try { MySqlDataAdapter da = new MySqlDataAdapter(sql, conn); DataSet ds = new DataSet(); da.Fill(ds); dataGrid.ItemsSource = ds.Tables[0].DefaultView; } catch (Exception ex) { MessageBox.Show(ex.Message); } conn.Close(); }
# 버튼 코드- Insert, Update
만약 라디오버튼 Male을 선택 → 그렇지않으면 여성임을 조건문설.
만약에 모든 선택과, 정보를 입력하고 insert버튼을 누르면
부서, 직급, 성별, 입사년월, 퇴사년월 들이 뜨게 됩니다.
그리고 그 정보들 → sql에 전송됩니다.
정확하게 정보가 전송이 됐다면 추가성공! 이라는 메세지박스를 뜨게 합니다.
// Insert 버튼 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.ToShortDateString(); //부서, 직급 dept = cbDept.Text; pos = cbPos.Text; try { conn.Open(); string sql = string.Format("INSERT INTO eis_table " + "(name, department, position, gender, data_enter, data_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("추가 성공!"); } catch (Exception ex) { MessageBox.Show(ex.Message); } conn.Close(); InitControls(); DisplayDataGrid(); }
// Update 버튼 private void btnUpdate_Click(object sender, RoutedEventArgs e) { conn.Open(); if (rbMale.IsChecked == true) gender = "남성"; else gender = "여성"; dateEnter = dpEnter.Text; dateExit = dpExit.Text; dept = cbDept.Text; pos = cbPos.Text; try { string sql = string.Format("UPDATE eis_table SET name='{0}', department='{1}', position='{2}'," + " gender='{3}', data_enter='{4}', data_exit='{5}', contact='{6}', comment='{7}' WHERE eid={8}", txtName.Text, dept, pos, gender, dateEnter, dateExit, txtContact.Text, txtComment.Text, txtEid.Text); MySqlCommand cmd = new MySqlCommand(sql, conn); if (cmd.ExecuteNonQuery() == 1) MessageBox.Show("수정 성공!"); //입력된 정보들이 업로드가 잘되면 수정 성공이라는 알림이 뜬다. } catch (Exception ex) { MessageBox.Show(ex.Message); } conn.Close(); InitControls(); DisplayDataGrid(); }
// Delete 버튼 private void btnDelete_Click(object sender, RoutedEventArgs e) { conn.Open(); string sql = string.Format("DELETE FROM eis_table WHERE eid={0}", txtEid.Text); try { MySqlCommand cmd = new MySqlCommand(sql, conn); if (cmd.ExecuteNonQuery() == 1) MessageBox.Show("삭제 성공!"); // 삭제가 되면 삭제 완료 메시지를 띄운다 } catch( Exception ex) { MessageBox.Show(ex.Message); } conn.Close(); InitControls(); DisplayDataGrid();
// LoadData 버튼 private void btnLoadData_Click(object sender, RoutedEventArgs e) { DisplayDataGrid(); }
이런 결과 화면 이 뜨고 데이터 베이스 안에 내가 입력한 정보들이 뜰껏이다.
'비주얼 프로그래밍' 카테고리의 다른 글
#13주차 "WPF 지렁이 게임 (0) 2024.06.07 #12주차 WPF "DockPanel과 WrapPanel" (0) 2024.06.07 #11주차 WPF 디자인 "좋아하는 프로그래밍 언어는?" (0) 2024.06.07 #11주차 WPF 로그인 창 만들기 (0) 2024.06.07 #11주차 WPF 만들기 "버튼을 이용한 디자인" (0) 2024.06.07